Hämta data från stängd arbetsbok mha ADO
Här demonstreras en teknik för att hämta data från ett arbetsblad i en stängd arbetsbok.
I exemplet används ADO (ActiveX Data Objects) för att etablera kopplingen till arbetsboken.
Saknas ADO-biblioteket på din dator kan den hämtas från Microsofts databashemsida. Det kan vara aktuellt för dig som använder XL 97 med ett äldre operativsystem än Windows 2000.
Innan proceduren körs måste en referens sättas till ADO:s bibliotek:
Det sker på följande sätt:1. Öppna VB-Editorn i XL.
2. Välj kommandot Verktyg | Referenser...
3. Bocka för ActiveX Data Objects x.x Library
Noterbart är att ingen felhanterng visas i de nedanstående procedurerna.
Sub Hämta_Data_Stängd_Arbetsbok()
'© 2001 Alla rättigheter XL-Dennis
Dim cnt As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim stDB As String
Dim iAntalFalt As Long, iAntal As Long
'Sökvägen till arbetsboken
stDB = ThisWorkbook.Path & "\" & "TabellData.xls"
'Tar bort tidigare hämtade uppgifter i det aktiva arbetsbladet
Cells(1, 1).CurrentRegion.Clear
'Här skapas anslutningen till den stängda arbetsboken
'Data hämtas från arbetsbladet "Data" och endast de poster som uppfyller
'villkoret månadslön >= 19.000 kr
cnt.ConnectionString = _
"DRIVER={Microsoft Excel Driver (*.xls)};" & "DBQ=" & stDB & ";"
cnt.Open
With rst
.CursorLocation = adUseClient
.Open "SELECT * FROM [Data$] WHERE [Lön]>=19000", cnt, _
adOpenDynamic, adLockOptimistic
End With
iAntalFalt = rst.Fields.Count
For iAntal = 0 To iAntalFalt - 1
Cells(1, iAntal + 1).Value = rst.Fields(iAntal).Name
Next iAntal
'**************************Excel 97*************************
Dim vaData As Variant
Dim iRad As Long, iKol As Long
Dim iPoster As Long, iFalt As Long
'Här läses alla poster in i en matris
vaData = rst.GetRows()
'Här identifieras antal poster och fält
iPoster = UBound(vaData, 2) + 1
iFalt = UBound(vaData, 1) + 1
'Här skrivs data in i det aktiva arbetsbladet
'Loop-förfarandet används för små datapostmängder
For iRad = 2 To iPoster
For iKol = 1 To iFalt
Cells(iRad, iKol).Value = vaData(iKol - 1, iRad - 2)
Next
Next
'***********************Excel 2000 / 2002 XP******************
'Här kopieras data till arbetsbladet
Cells(2, 1).CopyFromRecordset rst
'Kopplar ned anslutningen och tömmer arbetsminnet
Set rst = Nothing
Set cnt = Nothing
End Sub