Verwenden Sie eine geschlossene Arbeitsmappe als eine Datenbank (ADO) mit VBA in Microsoft Excel
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: FoldernameFilename.xls“, „SELECT * FROM [SheetName $];“, ThisWorkbook.Worksheets (1) .Range („A3“)
Ersetzen Sie SheetName durch den Arbeitsblattnamen, von 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 = New ADODB.Connection On Error Resume Next 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 Exit Sub End If ‚Öffnen eines Recordset Set rs = New ADODB.Recordset On Error Resume Next 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 $] WHI [Feldname] ‚“, _ cn, adOpenStatic, adLockOptimistic, adCmdText‘ rs.Open“ SELECT FROM [SheetName $] WHERE [Feldname] LIKE ‚A%‘ ORDER BY [Feldname] „, _ cn, adOpenStatic, adLockOptimistic, adCmdText ‚optional Möglichkeiten zum Abrufen eines Recordset ‚Set rs = cn.Execute („[A1: Z1000]“)‘ erstes Arbeitsblatt ‚Set rs = cn.Execute („[DefinedRangeName]“)‘ beliebiges Arbeitsblatt On Error GoTo 0 If rs Is Nothing Then MsgBox „Kann nicht geöffnet werden die Datei! „, vbExclamation, ThisWorkbook.Name cn.Close Set cn = Nothing Exit Sub End Wenn RS2WS rs, TargetCell ‚TargetCell.CopyFromRecordset rs‘ optionaler Ansatz für Excel 2000 oder höher Wenn rs.State = adStateOpen Dann rs.Close End If Set rs = Nothing cn.Close Set cn = Nothing End Sub Im Makrobeispiel wird davon ausgegangen, dass Ihr VBA-Projekt einen Verweis auf die ADO-Objektbibliothek hinzugefügt hat.
Sie können dies in der VBE tun, indem Sie das Menü Extras, Verweise und Microsoft ActiveX Data Objects x.x Object Library auswählen.