Använd en sluten arbetsbok som en databas (ADO) med VBA i Microsoft Excel

Anonim

Med procedurerna nedan kan du använda ADO för att hämta en postuppsättning från en stängd arbetsbok och läsa/skriva data.
Ring proceduren så här:

GetWorksheetData "C: FoldernameFilename.xls", "SELECT * FROM [SheetName $];", ThisWorkbook.Worksheets (1) .Range ("A3")
Ersätt SheetName med kalkylbladets namn som du vill hämta data från.

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
Om TargetCell inte är något, avsluta Sub
Ange cn = Ny ADODB.Connection
Vid fel Återuppta nästa
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
Vid fel GoTo 0
Om cn är ingenting då
MsgBox "Kan inte hitta filen!", VbExclamation, ThisWorkbook.Name
Avsluta Sub
Avsluta om

'öppna en rekorduppsättning
Ange rs = Ny ADODB.Recordset
Vid fel Återuppta nästa
rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText
'rs.Öppna "VÄLJ * FRÅN [SheetName $]", _
cn, adOpenForwardOnly, adLockReadOnly, adCmdText
'rs.Öppna "SELECT * FROM [SheetName $]", _
cn, adOpenStatic, adLockOptimistic, adCmdText
'rs.Öppna "VÄLJ * FRÅN [Arknamn $] VAR [Fältnamn] Gillar" A%"", _
cn, adOpenStatic, adLockOptimistic, adCmdText
'rs.Öppna "VÄLJ * FRÅN [Arknamn $] VAR [Fältnamn] Gillar" A%"-BESTÄLLNING AV [Fältnamn]", _
cn, adOpenStatic, adLockOptimistic, adCmdText

'valfria sätt att hämta en rekorduppsättning
'Ställ in rs = cn.Execute ("[A1: Z1000]")' första arbetsblad
'Ange rs = cn.Execute ("[DefinedRangeName]")' vilket arbetsblad som helst

Vid fel GoTo 0
Om rs är ingenting då
MsgBox "Kan inte öppna filen!", VbExclamation, ThisWorkbook.Name
cn. nära
Ställ in cn = ingenting
Avsluta Sub
Avsluta om

RS2WS rs, TargetCell
'TargetCell.CopyFromRecordset rs' valfritt tillvägagångssätt för Excel 2000 eller senare

Om rs.State = adStateOpen Då
rs.Stäng
Avsluta om
Ange rs = ingenting
cn. nära
Ställ in cn = ingenting
Avsluta Sub

Makroexemplet förutsätter att ditt VBA -projekt har lagt till en referens till ADO -objektbiblioteket.
Du kan göra detta från VBE genom att välja menyn Verktyg, Referenser och välja Microsoft
ActiveX Data Objects x.x Object Library.