Att arbeta med stora mängder data i Excel kan vara tidskrävande. Med hjälp av Excel & ADO (ActiveX Data Objects) kan du effektivisera din databehandling genom att importera data från en extern Excelbok utan att behöva öppna den. Denna metod är särskilt användbar för periodiska rutiner där du behöver hämta uppdaterad information snabbt och enkelt.
Steg 1: Förbered indatafilen
För att börja behöver du en Excelbok som innehåller de data du vill importera. Den kan se ut på vilket sätt som helst, men se till att den är korrekt strukturerad för att underlätta importprocessen. I vårt exempel har vi en indatafil som ser ut så här:
Steg 2: Skapa makroboken
Den andra filen du behöver är en Excelbok som innehåller makrot som ska utföra importen. Kom ihåg att spara denna fil i formatet ".xlsm" (från och med Excel 2007), eftersom den kommer att innehålla makron.
Steg 3: Öppna VBA-hanteraren
För att skriva makrokoden för importen, öppna VBA-hanteraren genom att trycka på Alt + F11
. Här kan du skapa en ny modul för att lägga in din makrokod.
Steg 4: Skriv makrokoden
Kopiera och klistra in följande makrokod i den nya modulen:
Sub ImporteraExcelTillExcel_ADO()
'--------------------------------------------------------------
'importerar data från en extern Excelbok utan att öppna den
'--------------------------------------------------------------
'variabeldeklareringar
Dim datConnection As ADODB.Connection
Dim recSet As ADODB.Recordset
Dim recRubrik As ADODB.Field
Dim strDB, strSQL As String
Dim strDriver As String
Dim i As Long
'sökväg till den externa Excelfilen
strDB = ThisWorkbook.Path & "\" & "MinExcelFil.xlsx" 'filen i samma folder
'strDB = "C:\ExcelVBA\MinExcelFil.xlsx" 'filen i annan folder
'uppkoppling
Set datConnection = New ADODB.Connection
Set recSet = New ADODB.Recordset
strDriver = "DRIVER=Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)"
datConnection.Open "DBQ=" & strDB & ";" & strDriver & ";UID=admin;"
'SQL-förfrågan
strSQL = "SELECT * FROM [Sheet1$A1:Z9999]" 'cellområde på visst ark
'strSQL = "SELECT * FROM [Cellområdesnamn]" 'för namngivna cellområden
'öppnar ett "recordset"
recSet.Open strSQL, datConnection, adOpenStatic
'kopierar in ny data
ActiveSheet.Range("A2").CopyFromRecordset recSet
'kopierar kolumnrubriker
i = 1
For Each recRubrik In recSet.Fields
ActiveSheet.Cells(1, i) = _
recRubrik.Name: i = i + 1
Next recRubrik
'kopplar ned (viktigt!)
recSet.Close
datConnection.Close
'stänger ned objekten (viktigt!)
Set recSet = Nothing
Set datConnection = Nothing
End Sub
Steg 5: Justeringar av makrokoden
Innan du kan köra makrot, gör följande justeringar:
- Sökväg: Ange den korrekta sökvägen till den externa Excelfilen som du vill importera data från.
- SQL-förfrågan: Justera cellområdet eller namngivna områden i SQL-frågan så att det passar din data.
Steg 6: Aktivera ADO-objekten i vba
För att använda ADO i din Excelbok måste du aktivera det i VBA. Gå till Verktyg
> Referenser
i VBA-hanteraren och markera Microsoft ActiveX Data Objects x.x Library
. Detta är en engångsåtgärd för just denna Excelbok.
Steg 7: Testkör importen
När allt är klart, gå tillbaka till kalkylbladet och kör makrot. Du bör nu se att all data har importerats, inklusive kolumnrubriker. Observera att cellformat (t.ex. fetstil) inte överförs. Så här ser den importerade datan ut:
Säkerhetskopiering av filer
Innan du börjar arbeta med ADO och makron, kom ihåg att alltid göra en säkerhetskopia av dina filer.
Avslutande tankar
Med dessa steg kan du enkelt importera data från en stängd Excelbok och på så sätt effektivisera dina rutiner. ADO och VBA i Excel tillhandahåller kraftfulla verktyg för att hantera data – använd dem till din fördel!