Im der Artikelreihe “Excel fernsteuern” haben Sie erfahren, wie Sie per Automation auf eine Excel-Datei zugreifen und dabei Daten aus der Tabelle lesen, schreiben oder bearbeiten können. Die Daten Zelle für Zelle zu durchlaufen ist dabei in vielen Fällen unumgänglich, vor allem, wenn Sie dabei auch noch individuelle Formatierungen unterbringen wollen. Wenn Sie jedoch schnell Daten von Excel nach Access oder umgekehrt bewegen wollen, ohne eine Excel-Instanz zu erzeugen und keine besonderen Anforderungen an die Formatierung haben, gibt es eine praktische Alternative – und zwar eine, bei der Sie sogar von Ihren vorhandenen DAO-Kenntnissen profitieren können.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1803_ExceldatenPerSQLUndDAO.accdb.
Excel-Zugriff per OpenRecordset und SELECT
Wenn Sie per DAO auf die Daten einer Datenbank zugreifen wollen, um diese entweder per VBA zu durchlaufen oder diese zu löschen, anzulegen oder zu bearbeiten, beginnen Sie in der Regel mit dem öffnen eines Recordset-Objekts auf Basis der Tabelle oder Abfrage, in der sich die Daten befinden, die durchlaufen oder bearbeitet werden sollen. Die Syntax für die dazu verwendete OpenRecordset-Methode des Database-Objekts ist dabei hinlänglich bekannt – Sie benötigen zwei Objektvariablen namens db und rst und dann geht es los:
Dim db As DAO.Database Dim rst As DAO.Recordset Set db = CurrentDb Set rst = db.OpenRecordset("SELECT * FROM tblArtikel", dbOpenDynaset) '... etwas mit den Datensätzen machen
Benötigte Excel-Informationen
Aber wie können wir das nun für den Zugriff auf die Daten einer Excel-Tabelle wie etwa der aus Bild 1 nutzen Dazu benötigen wir nur einige wenige Informationen über die Excel-Daten, auf die wir zugreifen wollen:
Bild 1: Formular-Entwurf unseres Beispielformulars
- den Dateinamen inklusive Verzeichnis,
- den Namen der Tabelle und
- den Bereich, auf den wir zugreifen wollen.
Den Rest bekommen wir durch geschickte Formulierung der SELECT-Abfrage hin. Diese ist gar nicht so viel komplizierter aufgebaut wie eine herkömmliche SELECT-Anweisung – wenn man weiß, wie es geht. Ein Beispiel ist das folgende:
SELECT * FROM [Artikelliste$A:J] IN 'C:\...\Artikel.xlsx'[Excel 8.0;HDR=No;IMEX=0;]
Diese Abfrage erwartet hinter dem FROM-Schlüsselwort den Namen der Tabelle in der Excel-Datei (hier Artikelliste)und davon durch ein Dollar-Zeichen ($) getrennt den betroffenen Bereich, hier A:J. Dieser Ausdruck muss in eckigen Klammern zusammengefasst werden. Danach müssen wir allerdings noch angeben, in welcher Datei sich die Daten befinden. Diese geben wir mit dem IN-Schlüsselwort an.
Dieses erwartet zwei Bestandteile. Als Erstes den Dateinamen in Hochkommata (‘C:\…\Artikel.xlsx’) und als zweites in eckigen Klammern Informationen darüber, in welchem Format die gelieferten Daten vorliegen ([Excel 8.0;HDR=No;IMEX=0;]).
Mit HDR geben Sie an, ob beim Zugriff vom Vorhandensein von Spaltenüberschriften in der ersten Zeile ausgegangen werden soll. In unseren Tests machte es allerdings keinen Unterschied – wir erhielten sowohl mit Yes als auch mit No nur die gewünschten Daten zurück und nicht die Spaltenüberschriften.
Die Prozedur aus Listing 1 zeigt, wie Sie die verschiedenen Parameter wie Dateiname, Tabellenname und Bereich einzeln in Variablen erfassen und diese dann zu einer SELECT-Anweisung zusammenstellen.
Public Sub ExcelPerRecordset() Dim db As DAO.Database Dim rst As DAO.Recordset Dim strDatei As String Dim strTabelle As String Dim strBereich As String Dim strSQL As String Set db = CurrentDb strDatei = CurrentProject.Path & "\Artikel.xlsx" strTabelle = "Artikelliste" strBereich = "A:J" strSQL = "SELECT * FROM [" & strTabelle & "$" & strBereich & "] IN '" & strDatei & "'[Excel 8.0;HDR=Yes;IMEX=0;]" Debug.Print strSQL Set rst = db.OpenRecordset(strSQL) Debug.Print rst.Fields(0).Name, rst.Fields(1).Name Do While Not rst.EOF Debug.Print rst.Fields(0), rst.Fields(1) rst.MoveNext Loop End Sub
Listing 1: Diese Prozedur erstellt ein Recordset auf Basis einer Excel-Tabelle und gibt die enthaltenen Daten aus.
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: