Gebruik een gesloten werkmap als database (ADO) met VBA in Microsoft Excel

Anonim

Met onderstaande procedures kunt u ADO gebruiken om een ​​recordset uit een gesloten werkmap op te halen en gegevens te lezen/schrijven.
Roep de procedure als volgt aan:

GetWorksheetData "C:FoldernameFilename.xls", "SELECT * FROM [SheetName$];", ThisWorkbook.Worksheets(1).Range("A3")
Vervang Bladnaam door de werkbladnaam waarvan u gegevens wilt ophalen.

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
Als TargetCell niets is, sluit dan Sub af
Stel cn = Nieuwe ADODB.Verbinding in
Bij fout Hervatten Volgende
cn.Open "DRIVER={Microsoft Excel-stuurprogramma (*.xls)};DriverId=790;ReadOnly=True;" & _
"DBQ=" & strSourceFile & ";"
' Driver-ID = 790: Excel 97/2000
' DriverId = 22: Excel 5/95
' DriverId = 278: Excel 4
' DriverId = 534: Excel 3
Bij fout Ga naar 0
Als cn niets is, dan
MsgBox "Kan het bestand niet vinden!", vbExclamation, ThisWorkbook.Name
Sluit sub
Stop als

' open een recordset
Stel rs = Nieuwe ADODB.Recordset in
Bij fout Hervatten Volgende
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 [Field Name] LIKE 'A%' ORDER BY [Field Name]", _
cn, adOpenStatic, adLockOptimistic, adCmdText

' optionele manieren om een ​​recordset op te halen
' Stel rs = cn.Execute in ("[A1:Z1000]") ' eerste werkblad
' Set rs = cn.Execute("[DefinedRangeName]") ' elk werkblad

Bij fout Ga naar 0
Als rs niets is, dan
MsgBox "Kan het bestand niet openen!", vbExclamation, ThisWorkbook.Name
cn.Sluiten
Stel cn = Niets in
Sluit sub
Stop als

RS2WS rs, TargetCell
'TargetCell.CopyFromRecordset rs' optionele benadering voor Excel 2000 of hoger

Als rs.State = adStateOpen Dan
rs.Sluiten
Stop als
Stel rs = Niets in
cn.Sluiten
Stel cn = Niets in
Einde sub

Het macrovoorbeeld gaat ervan uit dat uw VBA-project een verwijzing naar de ADO-objectbibliotheek heeft toegevoegd.
U kunt dit doen vanuit de VBE door het menu Tools, References te selecteren en Microsoft . te selecteren
ActiveX-gegevensobjecten x.x-objectbibliotheek.