Verwenden Sie eine geschlossene Arbeitsmappe als Datenbank (ADO) mit VBA in Microsoft Excel

Inhaltsverzeichnis

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.

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave