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. Metoden är särskilt användbar för periodiska rutiner där du snabbt och enkelt behöver hämta uppdaterad information.

Steg 1: Förbered indatafilen

Till att börja med behöver du en Excelbok som innehåller de data du vill importera. Den kan se ut hur som helst, men se till att den är korrekt strukturerad för att underlätta importen. I vårt exempel har vi en indatafil som ser ut så här:

Innehållet i den Excelfil vars data vi ska importera via ADO.

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 filen 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 öppnar du VBA-hanteraren genom att trycka på Alt + F11. Där kan du skapa en ny modul och lägga in din makrokod.

Lägg till en ny modul i VBA-hanteraren.

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 behöver du göra följande justeringar:

  • Sökväg: Ange rätt sökväg till den externa Excelfilen som du vill importera data från.
  • SQL-fråga: Justera cellområdet eller de namngivna områdena i SQL-frågan så att de passar dina 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 den här Excelboken.

Aktivering av ADO-bibliotek i Excel VBA.

Steg 7: Testkör importen

När allt är klart går du 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:

Resultatet av ADO-importen från Excel till Excel.

Säkerhetskopiering av filer

Innan du börjar arbeta med ADO och makron bör du komma 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 ger dig kraftfulla verktyg för att hantera data – använd dem till din fördel!