Bruk en lukket arbeidsbok som en database (ADO) ved hjelp av VBA i Microsoft Excel

Anonim

Med prosedyrene nedenfor kan du bruke ADO til å hente et rekordsett fra en lukket arbeidsbok og lese/skrive data.
Ring prosedyren slik:

GetWorksheetData "C: FoldernameFilename.xls", "SELECT * FROM [SheetName $];", ThisWorkbook.Worksheets (1) .Range ("A3")
Erstatt Arknavn med regnearknavnet 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 noe, avslutter du Sub
Sett cn = Ny ADODB.Connection
Ved feil Fortsett neste
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 feil GoTo 0
Hvis cn er ingenting da
MsgBox "Kan ikke finne filen!", VbExclamation, ThisWorkbook.Name
Avslutt Sub
Slutt om

'åpne et platesett
Sett rs = Ny ADODB.Recordset
Ved feil Fortsett neste
rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText
'rs.Åpne "SELECT * FROM [SheetName $]", _
cn, adOpenForwardOnly, adLockReadOnly, adCmdText
'rs.Åpne "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

'valgfrie måter å hente et rekordsett på
'Sett rs = cn.Execute ("[A1: Z1000]")' første regneark
'Sett rs = cn.Execute ("[DefinedRangeName]")' et hvilket som helst regneark

Ved feil GoTo 0
Hvis rs er ingenting da
MsgBox "Kan ikke åpne filen!", VbExclamation, ThisWorkbook.Name
cn. Lukk
Sett cn = ingenting
Avslutt Sub
Slutt om

RS2WS rs, TargetCell
'TargetCell.CopyFromRecordset rs' valgfri tilnærming for Excel 2000 eller nyere

Hvis rs.State = adStateOpen Da
rs.Lukk
Slutt om
Sett rs = ingenting
cn. Lukk
Sett cn = ingenting
Slutt Sub

Makroeksemplet forutsetter at VBA -prosjektet ditt har lagt til en referanse til ADO -objektbiblioteket.
Du kan gjøre dette fra VBE ved å velge menyen Verktøy, Referanser og velge Microsoft
ActiveX Data Objects x.x Object Library.