Import: Access-tabell i Excel via VBA
Access är ju sedan länge en del av Office-sviten och det finns därför ett stort antal Access-databaser runt om på företag. I det här exemplet kommer vi att exportera en Access-tabell till Excel via programkod i Excel VBA.
Detta moment kan i och för sig även utföras via menyer i Access, men vi utgår från att vi vill kunna automatisera den här importen via ett Excelmakro.
Ett tänkbart scenario är att du varje dag exporterar Access-data till Excel. En perfekt lösning är en enkel uppsättning Excelmakron som automatiserar det här arbetet åt dig.
ADO – ActiveX Data Objects
I exemplet skapar vi en koppling från Excel till Access via ADO (ActiveX Data Objects) som är en teknik för att koppla upp sig mot databaser och sedan hämta in datan via så kallade recordsets. Tekniken introducerades 1996 av Microsoft och används i en stor rad sammanhang.
Efter att databasen har kopplats upp mot Excel så exporteras sedan all data från Access till aktivt kalkylblad.
Ladda in ADO-objekten i Excel
För att vi skall kunna nyttja ADO så måste vi i Excels VBA-editor ladda in ADO-objekten.
Detta gör du via Tools – References i VBA-editorn. Se bilden nedan:
VBA-kod för att importera Access-tabell i Excel
I kodexemplet så kopplar vi upp oss mot Accessdatabasen db.mdb (eller db.accdb om databasen är sparad i Accessversion 2007 eller nyare) som ligger i samma folder som aktiv Excelfil. Du ser i koden nedan hur du skriver för att peka på en databas som ligger i en annan folder.
strDB = ThisWorkbook.Path & "\" & "db.mdb" 'strDB = "C:\vba\db.mdb" 'om i annan folder |
Du måste också ange namnet på den specifika tabell i Access som du vill hämta data från:
strTabell = "pengar_2011"
|
Nedan ser du den kompletta koden som utför operationen.
Databas: Access 2003 eller tidigare
Sub Importera_Access_I_Excel() 'dimensions Dim datConnection As ADODB.Connection Dim recSet As ADODB.Recordset Dim strDB, strSQL As String Dim strTabell As String Dim lngTabeller As Long Dim i As Long 'välj en av dessa sökvägar till din Accessdatabas (t ex db.mdb) strDB = ThisWorkbook.Path & "\" & "db.mdb" 'strDB = "C:\vba\db.mdb" 'om i annan folder 'namn på tabellen i Access strTabell = "pengar_2011" 'skapa ADO-kopplingen Set datConnection = New ADODB.Connection Set recSet = New ADODB.Recordset datConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source =" & strDB & ";" 'SQL-förfrågan strSQL = "SELECT * FROM " & strTabell & "" recSet.Open strSQL, datConnection 'kopierar data till kalkylbladet (från och med rad 2 i Excel) ActiveSheet.Cells(2, 1).CopyFromRecordset recSet 'kopierar kolumnrubriker (rad 1 i Excel) lngCampos = recSet.Fields.Count For i = 0 To lngCampos - 1 ActiveSheet.Cells(1, i + 1).Value = recSet.Fields(i).Name Next 'kopplar ned recSet.Close: Set recSet = Nothing datConnection.Close: Set datConnection = Nothing End Sub |
Databas: Access 2007
Sub Importera_Access_I_Excel() 'dimensions Dim datConnection As ADODB.Connection Dim recSet As ADODB.Recordset Dim strDB, strSQL As String Dim strTabell As String Dim lngTabeller As Long Dim i As Long 'välj en av dessa sökvägar till din Accessdatabas (t ex db.mdb) strDB = ThisWorkbook.Path & "\" & "db.accdb" 'strDB = "C:\vba\db.mdb" 'om i annan folder 'namn på tabellen i Access strTabell = "pengar_2011" 'skapa ADO-kopplingen Set datConnection = New ADODB.Connection Set recSet = New ADODB.Recordset datConnection.Open "Provider=Microsoft.Ace.OLEDB.12.0; _ Persist Security Info = False;" & "Data Source =" & strDB & ";" 'SQL-förfrågan strSQL = "SELECT * FROM " & strTabell & "" recSet.Open strSQL, datConnection 'kopierar data till kalkylbladet (från och med rad 2 i Excel) ActiveSheet.Cells(2, 1).CopyFromRecordset recSet 'kopierar kolumnrubriker (rad 1 i Excel) lngCampos = recSet.Fields.Count For i = 0 To lngCampos - 1 ActiveSheet.Cells(1, i + 1).Value = recSet.Fields(i).Name Next 'kopplar ned recSet.Close: Set recSet = Nothing datConnection.Close: Set datConnection = Nothing End Sub |