News & Tipps zu Microsoft Access

Lesen Sie hier einige der besten Beiträge aus SmartTools Access Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Access.

Beitrag aus SmartTools Access Weekly

Bestimmte Zelle in Excel-Tabelle per VBA auslesen

Access 365 2019 2016 2013 2010 2007

FRAGE Ich stehe immer wieder vor der Aufgabe, aus Access heraus Werte, aus einer Excel-Tabelle auslesen zu müssen. Der Aufbau der Tabellen ist bekannt, so dass ich ganz gezielt auf bestimmte Zellen zugreifen kann. Wie lässt sich diese Aufgabe am einfachsten per VBA realisieren? Am hilfreichsten wäre eine Funktion, der ich flexibel die Zeilen- und Spaltennummer der gewünschten Zelle übergeben könnte.

Diverse Anfragen

ANTWORT Dazu binden Sie zunächst die Excel-Tabelle als verknüpfte Tabelle in Access ein:

  1. Klicken Sie auf dem Register "Externe Daten" in der Gruppe "Importieren" auf das Symbol Excel.
  2. Lokalisieren Sie über Durchsuchen die Excel-Arbeitsmappe mit der Tabelle, die die Bestelldaten enthält.
  3. Aktivieren Sie die Option Erstellen Sie eine Verknüpfung zur Datenquelle, indem Sie eine verknüpfte Tabelle erstellen.
  4. Klicken Sie auf Ok, folgen Sie den weiteren Anweisungen des Import-Assistenten und nehmen Sie die notwendigen Einstellungen vor. Als Namen für die verknüpfte Tabelle geben Sie beispielsweise "Bestelldaten aus Excel" ein.
  5. Klicken Sie nach Abschluss der Einbindung auf Ok.

Im Datenbankfenster bzw. im Navigationsbereich finden Sie nun ein Symbol einer Excel-Tabelle mit einem kleinen schwarzen/blauen Pfeil davor. Um auf ein bestimmtes Feld einer bestimmten Zeile dieser Tabelle zuzugreifen, setzen Sie in der VBA-Entwicklungsumgebung eine Referenz auf DAO und kopieren folgende Funktion in ein neues oder ein vorhandenes Modul:

Function ExcelFeld(strTabName As String, _
                   lngSpalte As Long) _
                   lngZeile As Long, _
                   As Variant
  Dim db As DAO.Database
  Dim rs As DAO.Recordset

  On Error Resume Next
  Set db = CurrentDb()
  Set rs = db.OpenRecordset(strTabName, _
                            dbOpenDynaset)
  rs.AbsolutePosition = lngZeile
  ExcelFeld = rs.Fields(lngSpalte - 1)

  rs.Close
  Set rs = Nothing
  Set db = Nothing

End Function

Die Funktion öffnet die mit "strTabName" angegebene Tabelle als Recordset, positioniert diesen über "AbsolutePosition" auf den der gewünschten Zeile (lngZeile) entsprechenden Datensatz und liest daraus den Inhalt der Spalte (lngSpalte) über die Fields-Auflistung auf. Diese wird von "0..n" indexiert, so dass von der Spaltennummer "1" abzuziehen ist.

In Ihren VBA-Routinen können Sie mit der folgenden Anweisung zum Beispiel den Inhalt der 3. Spalte aus der 7. Zeile auslesen (Zelle C7):

Dim strWarengruppe As String

strWarenGruppe = ExcelFeld("Bestelldaten aus Excel", 3, 7)