Navigation

Excel

Es gibt 2 Möglichkeiten Daten aus Excel zu bekommen:

  • Die Tabelle in Access einlesen.
  • Die Tabelle importieren.

    Beides ist mit DoCmd.TransferSpreadsheet möglich
    oder auch von Hand mit Datei / Externe Daten zu erreichen.
    Deswegen gehe ich hier nicht weiter drauf ein, sondern Verweise auf die Hilfe!
    Aber es kann ja vorkommen, dass man nur ein paar Werte hin- oder herschaufeln
    möchte oder die Tabellen dies nicht zulassen.
    Dafür verwendet man dann eine Excelinstanz und einen Recordset um die
    Daten zu transferieren. Als Beispiel werden hier Daten aus einer Tabelle in
    eine Excelmappe gespeichert. Zu Beachten ist, dass Excelmappen nicht wie Accessauflistungen
    mit 0, sondern mit 1 beginnen. Ausserdem ist ein Verweis auf die Excel-Bibliothek
    zu setzen. Ein Verweis auf die Excel-Bibliothek ist erforderlich!

    Dim appXLS As Excel.Application
    Dim wbkXLS As Excel.Workbook
    Dim wksXLS As Excel.Worksheet
    Dim rs     As DAO.Recordset
    Dim Spalte As Long
    Dim Zeile  As Long
    
    '//Excelinstanz öffnen
    Set appXLS = New Excel.Application
    Set wbkXLS = appXLS.Workbooks.Open("C:\DeineTabelle.XLS")
    Set wksXLS = wbkXLS.Worksheets("Tabelle1")
    '//Recordset öffnen
    Set rs = DBEngine(0)(0).OpenRecordset("DeineTabelle", dbOpenDynaset)
    
    Zeile = 1
    
    '//Mit einer Schleife wird der Recordset durchlaufen und die Daten
    '//an Excel übergeben
    While Not rs.EOF
        For Spalte = 0 To rs.Fields.Count - 1
            wksXLS.Cells(Zeile, Spalte + 1) = rs.Fields(Spalte)
        Next Spalte
        Zeile = Zeile + 1
        rs.MoveNext
    Wend
    
    wbkXLS.Close
    appXLS.Quit
    rs.Close
    Set wksXLS = Nothing
    Set wbkXLS = Nothing
    Set appXLS = Nothing
    Set rs = Nothing





    In diesem Beispiel geht es andersherum. Zu Beachten ist, dass die Excelauflistung
    kein wirkliches Ende hat.
    Hier muss man überprüfen, ob noch Werte in den Zellen stehen. Der
    Import gestaltet sich meist umständlicher, als der Export.

    Dim appXLS     As Excel.Application
    Dim wbkXLS     As Excel.Workbook
    Dim wksXLS     As Excel.Worksheet
    Dim rs         As DAO.Recordset
    Dim Spalte     As Long
    Dim SpalteAkt  As Long
    Dim Zeile      As Long
    Dim ZeileAkt   As Long
    Dim i          As Long
    
    
    '//Excelinstanz öffnen
    Set appXLS = New Excel.Application
    Set wbkXLS = appXLS.Workbooks.Open("C:\DeineTabelle.XLS")
    Set wksXLS = wbkXLS.Worksheets("Tabelle1")
    '//Recordset öffnen
    Set rs = DBEngine(0)(0).OpenRecordset("DeineTabelle", dbOpenDynaset)
    
    Zeile = 1
    Spalte = 1
    
    '//Zeilenanzahl ermitteln
    While Len(Nz(wksXLS.Cells(Zeile, 1), "")) > 0
    	Zeile = Zeile + 1
    Wend
    
    '//Spaltenanzahl ermitteln
    '//Zeilenanzahl ermitteln
    While Len(Nz(wksXLS.Cells(1, Spalte), "")) > 0
    	Spalte = Spalte + 1
    Wend
    
    ZeileAkt = 1
    
    '//Daten an das Recorset übergeben
    While ZeileAkt < Zeile
    	SpalteAkt = 1
    	rs.AddNew
    	For i = SpalteAkt To Spalte
    		rs.Fields(SpalteAkt - 1) = wksXLS.Cells(ZeileAkt, SpalteAkt)
    		SpalteAkt = SpalteAkt + 1
    	Next i
    	rs.Update
    	ZeileAkt = ZeileAkt + 1
    Wend
    
    wbkXLS.Close
    appXLS.Quit
    rs.Close
    Set wksXLS = Nothing
    Set wbkXLS = Nothing
    Set appXLS = Nothing
    Set rs = Nothing