Importera data från Access to Excel (DAO) med VBA i Microsoft Excel

Anonim

CopyFromRecordset är förmodligen den enklaste metoden för att få data från en Access -tabell till ett Excel -kalkylblad.

Sub DAOCopyFromRecordSet (DBFullName As String, TableName As String, _ FieldName As String, TargetRange As Range) 'Exempel: DAOCopyFromRecordSet "C: \ FolderName \ DataBaseName.mdb", _ "TableName", "FieldName", Range ("C1") Dim db As Database, rs As Recordset Dim intColIndex As Integer Set TargetRange = TargetRange.Cells (1, 1) Set db = OpenDatabase (DBFullName) Set rs = db.OpenRecordset (TableName, dbOpenTable) 'all records' Set rs = db. OpenRecordset ("SELECT * FROM" & TableName & _ "WHERE" & FieldName & _ "= 'MyCriteria'", dbReadOnly) 'filter records' skriva fältnamn För intColIndex = 0 Till rs.Fields.Count - 1 TargetRange.Offset ( 0, intColIndex.

Om du vill ha mer kontroll med dataimporten kan du anpassa makrot nedan:

Sub DAOFromAccessToExcel (DBFullName As String, TableName As String, _ FieldName As String, TargetRange As Range) 'Exempel: DAOFromAccessToExcel "C: \ FolderName \ DataBaseName.mdb", _ "TableName", "FieldName", Range ("B1") Dim db As Database, rs As Recordset Dim lngRowIndex As Long Set TargetRange = TargetRange.Cells (1, 1) Set db = OpenDatabase (DBFullName) Set rs = db.OpenRecordset (TableName, dbOpenTable) 'all records' Set rs = DB. OpenRecordset ("SELECT * FROM" & _ TableName & "WHERE" & FieldName & _ "= 'MyCriteria'", dbReadOnly) 'filter records lngRowIndex = 0 Med rs If Not .BOF Then .MoveFirst While Not .EOF TargetRange.Offset ( lngRowIndex, 0) .Formula = .Fields (FieldName) .MoveNext lngRowIndex = lngRowIndex + 1 Avsluta med Set rs = Nothing db.Close Set db = Nothing End Sub

Makroexemplen förutsätter att ditt VBA -projekt har lagt till en referens till DAO -objektbiblioteket.
Du kan göra detta från VBE genom att välja menyn Verktyg, Referenser och välja Microsoft DAO x.xx Object Library.
Använd ADO om du kan välja mellan ADO och DAO för dataimport eller export.