Brug en lukket projektmappe som en database (ADO) ved hjælp af VBA i Microsoft Excel

Anonim

Med nedenstående procedurer kan du bruge ADO til at hente et rekordsæt fra en lukket projektmappe og læse/skrive data.
Kald proceduren sådan:

GetWorksheetData "C: FoldernameFilename.xls", "SELECT * FROM [SheetName $];", ThisWorkbook.Worksheets (1) .Range ("A3")
Erstat SheetName med det regnearksnavn, du vil hente data fra.

Sub GetWorksheetData (strSourceFile As String, strSQL As String, TargetCell As Range)
Dim cn As ADODB.Connect, rs As ADODB.Recordset, f As Integer, r As Long
Hvis TargetCell ikke er noget, skal du afslutte Sub
Indstil cn = Ny ADODB.forbindelse
Ved fejl Genoptag næste
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
Ved fejl GoTo 0
Hvis cn er ingenting så
MsgBox "Kan ikke finde filen!", VbExclamation, ThisWorkbook.Name
Afslut Sub
Afslut Hvis

'åbne et rekordsæt
Indstil rs = Ny ADODB.Recordset
Ved fejl Genoptag næste
rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText
'rs.Åbn "SELECT * FROM [SheetName $]", _
cn, adOpenForwardOnly, adLockReadOnly, adCmdText
'rs.Åbn "SELECT * FROM [SheetName $]", _
cn, adOpenStatic, adLockOptimistic, adCmdText
'rs.Åbn "SELECT * FROM [SheetName $] WHERE [Field Name] LIKE' A%'", _
cn, adOpenStatic, adLockOptimistic, adCmdText
'rs.Åbn "SELECT * FROM [SheetName $] WHERE [Field Name] LIKE' A%'ORDER BY [Field Name]", _
cn, adOpenStatic, adLockOptimistic, adCmdText

'valgfrie måder at hente et rekordsæt på
'Indstil rs = cn.Execute ("[A1: Z1000]")' første regneark
'Indstil rs = cn.Execute ("[DefinedRangeName]")' ethvert regneark

Ved fejl GoTo 0
Hvis rs ikke er noget så
MsgBox "Kan ikke åbne filen!", VbExclamation, ThisWorkbook.Name
cn.Luk
Indstil cn = Intet
Afslut Sub
Afslut Hvis

RS2WS rs, TargetCell
'TargetCell.CopyFromRecordset rs' valgfri tilgang til Excel 2000 eller nyere

Hvis rs.State = adStateOpen Så
rs.Luk
Afslut Hvis
Indstil rs = Intet
cn.Luk
Indstil cn = Intet
Afslut Sub

Makroeksemplet antager, at dit VBA -projekt har tilføjet en reference til ADO -objektbiblioteket.
Du kan gøre dette inde fra VBE ved at vælge menuen Værktøjer, Referencer og vælge Microsoft
ActiveX Data Objects x.x Object Library.