Export av statisk data till Access


Här demonstreras hur vi automatiskt kan exportera data från ett arbetsblad i Excel till en tabell i en Access-databas.

I exemplet används ADO (ActiveX Data Objects) för export av all data.

Saknas ADO-biblioteket på din dator kan den hämtas från Microsofts databashemsida. Det kan vara aktuellt för dig som använder Excel 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 Excel.

2. Välj kommandot Verktyg | Referenser...

3. Kryssa för Microsoft ActiveX Data Objects x.x Library

 

I första exemplet visas hur vi överför data per post medan det andra hur vi exporterar all data direkt till en tabell.

För att det andra exemplet ska fungera krävs att fältnamnen finns angivna i första raden i arbetsbladet, exakt till såväl antal som stavning.

Exempel 1: Per post

 

Option Explicit  

Sub Exportera_Accessdata()

   '© 2003 Alla rättigheter XL-Dennis

   Dim cnt As ADODB.Connection

   Dim rst As ADODB.Recordset

   Dim rnExportOmrade As Range, rnCell As Range

   Dim stDB As String

   Dim vaExport As Variant

   Dim i As Long

 

   Set rnExportOmrade = ActiveSheet.Range("D12:D16")

   Set cnt = New ADODB.Connection

   Set rst = New ADODB.Recordset

 

   stDB = ThisWorkbook.Path & "\" & "XLData.mdb"

   vaExport = rnExportOmrade.Value

 

   'Här skapas databasanslutningen.

   cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _

         "Data Source=" & stDB & ";"

 

   'Här öppnas tabellen tblNamn.   

   rst.Open "tblNamn", cnt, 1, 3, adCmdTableDirect

 

   'Här läses data in i tabellen.

   For i = LBound(vaExport) To UBound(vaExport)

      With rst

         .AddNew

         .Fields("Namn") = vaExport(i, 1)

         .Update

      End With

   Next i

 

   'Kopplar ned anslutningen och tömmer arbetsminnet.

   rst.Close

   Set rst = Nothing

   cnt.Close

   Set cnt = Nothing

 

   With Application

      .ScreenUpdating = False

      rnExportOmrade.ClearContents

      .ScreenUpdating = True

   End With

 End Sub

 

Exempel 2: All data
 

Option Explicit

 Sub Update_Table_Access()

   '© 2004 Alla rättigheter XL-Dennis

  Dim cnt As ADODB.Connection

  Dim stSQL As String, stCon As String, stDB As String

 

  'Namn och sökväg till databasen.

  stDB = ThisWorkbook.Path & "\Db1.mdb"

 

  'Skapa anslutningssträngen.

  stCon = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

              "Data Source=" & stDB & ";"

 

  'Skapa SQL-uttrycket.

  stSQL = "INSERT INTO Table1 SELECT * FROM [Sheet1$] IN '" _

               & ThisWorkbook.FullName & "' 'Excel 8.0;'"

 

  'Instantiera ADODB objektet.

  Set cnt = New ADODB.Connection

 

  With cnt

    .Open stCon

    'Exekverar uppdateringen.

    .Execute (stSQL)

  End With

 

  'Kopplar ned anslutningen.

  cnt.Close

 

  'Frigör objekt från minnet.

  Set cnt = Nothing

End Sub