Excel & ADO: Import från stängd Excelbok

Först publicerad:

| © ExcelKungen.com

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:

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 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.

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, 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.

Aktivering av ADO-bibliotek i Excel VBA.

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:

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

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!

Populära artiklar

Dagens tips

Relaterade artiklar