Mit den folgenden Verfahren können Sie ADO verwenden, um ein Recordset aus einer geschlossenen Arbeitsmappe abzurufen und Daten zu lesen/schreiben.
Rufen Sie die Prozedur wie folgt auf:
GetWorksheetData "C:OrdnernameDateiname.xls", "SELECT * FROM [SheetName$];", ThisWorkbook.Worksheets(1).Range("A3")
Ersetzen Sie SheetName durch den Arbeitsblattnamen, aus dem Sie Daten abrufen möchten.
Sub GetWorksheetData(strSourceFile As String, strSQL As String, TargetCell As Range)
Dim cn As ADODB.Connection, rs As ADODB.Recordset, f As Integer, r As Long
Wenn TargetCell nichts ist, dann beenden Sie Sub
Set cn = Neue ADODB.Connection
Bei Fehler Fortsetzen als nächstes
cn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DriverId=790;ReadOnly=True;" & _
"DBQ=" & strSourceFile & ";"
' DriverId=790: Excel 97/2000
' DriverId=22: Excel 5/95
' DriverId=278: Excel 4
' DriverId=534: Excel 3
Bei Fehler GoTo 0
Wenn cn nichts ist, dann
MsgBox "Kann die Datei nicht finden!", vbExclamation, ThisWorkbook.Name
Abo beenden
Ende Wenn
'Öffne ein Recordset
Set rs = Neues ADODB.Recordset
Bei Fehler Fortsetzen als nächstes
rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText
' rs.Open "SELECT * FROM [SheetName$]", _
cn, adOpenForwardOnly, adLockReadOnly, adCmdText
' rs.Open "SELECT * FROM [SheetName$]", _
cn, adOpenStatic, adLockOptimistic, adCmdText
' rs.Open "SELECT * FROM [SheetName$] WHERE [Field Name] LIKE 'A%'", _
cn, adOpenStatic, adLockOptimistic, adCmdText
' rs.Open "SELECT * FROM [SheetName$] WHERE [Feldname] LIKE 'A%' ORDER BY [Feldname]", _
cn, adOpenStatic, adLockOptimistic, adCmdText
' optionale Möglichkeiten zum Abrufen eines Recordsets
' Set rs = cn.Execute("[A1:Z1000]") ' erstes Arbeitsblatt
' Set rs = cn.Execute("[DefinedRangeName]") ' ein beliebiges Arbeitsblatt
Bei Fehler GoTo 0
Wenn rs nichts ist, dann
MsgBox "Datei kann nicht geöffnet werden!", vbExclamation, ThisWorkbook.Name
cn.Schließen
Setze cn = Nichts
Abo beenden
Ende Wenn
RS2WS rs, TargetCell
' TargetCell.CopyFromRecordset rs ' optionaler Ansatz für Excel 2000 oder höher
Wenn rs.State = adStateOpen Then
rs.Schließen
Ende Wenn
Setze rs = Nichts
cn.Schließen
Setze cn = Nichts
End Sub
Im Makrobeispiel wird davon ausgegangen, dass Ihr VBA-Projekt einen Verweis auf die ADO-Objektbibliothek hinzugefügt hat.
Sie können dies innerhalb der VBE tun, indem Sie das Menü Extras, Referenzen auswählen und Microsoft . auswählen
ActiveX-Datenobjekte x.x-Objektbibliothek.