Autor: André Minhorst, Duisburg
Es gibt einige Datenbanken, deren Daten nicht direkt in der Datenbank, sondern über den Export von unterschiedlichen anderen Tabellenformaten generiert wird. Sehr beliebt ist hier Microsoft Excel. Der Import des Inhalts einer Excel-Tabelle ist durch die Verwandtschaft von Access und Excel auch leicht mittels Assistenten zu realisieren. Doch wenn es um den immer wiederkehrenden Import einer größeren Anzahl von Tabellen geht, kann das Ganze schnell eintönig werden. Daher lernen Sie im vorliegenden Beitrag, wie Sie den Import bestimmter Tabellen via VBA automatisieren können.
Der Import von Excel-Tabellen kann grundsätzlich auf zwei unterschiedliche Arten erfolgen:
Ersten besteht die Möglichkeit, eine Excel-Tabelle in eine neue Access-Tabelle zu transferieren.
Die zweite Möglichkeit ist der Import der Excel-Tabelle in eine bestehende Access-Tabelle. In dem Fall gibt es wiederum zwei Alternativen:
Entweder man kopiert den kompletten Inhalt der Tabelle in die bestehende Tabelle nachdem man alle bestehenden Datensätze gelöscht hat, oder man kopiert nur die neuen Datensätze in die Tabelle. Dazu muss man lediglich einen eindeutigen Index festlegen, der auch Bestandteil der Excel-Tabelle ist. Im vorliegenden Beitrag lernen Sie die unterschiedlichen Möglichkeiten kennen.
Hinweis
Weitere Informationen zur Zusammenarbeit zwischen Access und Excel können Sie dem Beitrag Access und Excel in der Gruppe 4.14 des Praxishandbuches Access 97 entnehmen.
Mittelpunkt des Imports einer Excel-Tabelle ist die Methode TransferSpreadsheet des DoCmd-Befehls. Mit dieser Methode können Sie eine Excel-Tabelle oder einen Bereich einer Excel-Tabelle in eine vorgegebene Access-Tabelle importieren. Die Syntax der Methode lautet folgendermaßen:
DoCmd.TransferSpreadsheet [Transfertyp], [Spreadsheettyp], Tabellenname, Dateiname, [BesitztFeldnamen], [Bereich]
Für den Parameter Transfertyp können Sie die Konstanten acImport, acExport oder acLink angeben. Im vorliegenden Fall verwenden Sie die Konstante acImport, die auch gleichzeitig der Standardwert ist. Sie können den Parameter also weglassen.
Mit dem Parameter Spreadsheettyp legen Sie die Art der Tabelle fest. Es gibt einige Konstanten für den Parameter, interessant sind aber nur die Konstanten acSpreadsheetTypeExcel8 für Excel 97 bzw. acSpreadsheetTypeExcel9 für Excel 2000. Da die beiden Formate aber identisch sind, haben beide den Wert 8. Dieser Wert entspricht dem Standardwert und daher können Sie ihn auch weglassen.
Die Angabe des Parameters Tabellenname der Access-Tabelle hingegen ist nicht optional: Geben Sie hier unbedingt den Namen der Tabelle Ihrer Access-Datenbank an, in die Sie den Inhalt der Excel-Tabelle importieren möchten. Setzen Sie den Namen in Anführungszeichen.
Dem Parameter Dateiname weisen Sie den Namen der gewünschten Excel-Tabelle zu. Geben Sie den vollständigen Pfad inklusive Dateinamen an und setzen Sie die Information ebenfalls in Anführungszeichen.
Mit dem Parameter Besitzt Feldnamen teilen Sie der Methode mit, ob die erste Zeile der Excel-Tabelle die Feldnamen enthält. Wenn Sie den Wert True(-1) angeben, ignoriert Access die erste Zeile der Tabelle beim Einlesen. Wenn die Tabelle keine Feldnamen enthält (was in der Praxis nicht sehr häufig vorkommen) setzen Sie für den Parameter den Wert False(0) ein.
Schließlich teilen Sie der Methode mit, welchen Bereich der Excel-Datei sie importieren soll. Wenn Sie keinen Bereich angeben, importiert Access das komplette erste Tabellenblatt der Excel-Datei.
Andere Möglichkeiten sind z. B. die Angabe des Namens des gewünschten Tabellenblatts so-wie – falls erforderlich – die Bezeichnung eines festgelegten Bereiches des angegebenen Tabellenblatts oder die Beschreibung des Bereichs.
Die genaue Syntax der erfor-derlichen Angaben erfahren Sie weiter unten.
Um den Import der Excel-Tabellen möglichst komfortabel zu gestalten, erstellen Sie nun ein passendes Formular. Mit seiner Hilfe können Sie anschließend die Excel-Dateien mit den zu importierenden Daten auswählen und den Import starten.
Steuerelemente des Formulars
Das Formular enthält ein Textfeld sowie drei Schaltflächen (siehe Bild 1). Das Textfeld dient zur Eingabe des Namens der Excel-Datei. Die Schaltfläche, die sich unmittelbar neben dem Textfeld befindet, dient zum Aufrufen eines Dialoges zur Auswahl der Datei.
Die Schaltfläche mit der Beschriftung Tabellen importieren startet den Import-Vorgang. Die Schaltfläche mit der Beschriftung Schließen dient zum Beenden des Imports.
Auswahl der Excel-Datei
Die Auswahl der Excel-Datei erfolgt über den von Windows zur Verfügung gestellten Datei öffnen-Dialog. Ein Mausklick auf die Schaltfläche mit den drei Punkten […] aktiviert den Dialog.
Private Sub btnImportieren_Click() If txtDateiname = "" Or IsNull(txtDateiname) Then MsgBox "Wählen Sie bitte zunächst die gewünschte Excel-Datei aus." Exit Sub End If If Not FileExists(Nz(Me!txtDateiname)) Then MsgBox "Die Datei wurde nicht gefunden.", vbExclamation Me!txtDatei.SetFocus Exit Sub End If If vbNo = MsgBox("Der Import wird nun gestartet." & vbCrLf & vbCrLf _ & "Möchten Sie fortfahren", vbYesNo + vbExclamation) Then Exit Sub End If ''Importvorgang starten End Sub
Der benötigte Code soll hier nicht weiter beschrieben werden. Sie finden ihn allerdings in den Modulen der Beispieldatenbank.
Hinweis
Weitere Informationen zur Programmierung des Aufrufs eines Dialoges zur Auswahl der Dateien finden Sie im Beitrag Dateidialoge mit Access öffnen in der Gruppe 5.5 im Praxishandbuch Access 97.
Alternativ kann der Anwender auch den kompletten Namen der Datei inklusive Pfadangabe von Hand eingeben.
Beenden des Import-Dialogs
Mit der Schaltfläche Schließen kann der Anwender den Dialog beenden. Um die Funktionalität der Schaltfläche zu gewährleisten, hinterlegen Sie für die Ereigniseigenschaft Beim Klicken die folgende Prozedur:
Private Sub btnSchliessen_Click() DoCmd.Close acForm, Me.Name End Sub
Starten des Import-Vorganges
Hinter der Schaltfläche mit der Beschriftung Importieren befindet sich eine Prozedur, die den Import-Vorgang startet (Quellcode 1).
Die Prozedur überprüft zunächst, ob der Benutzer überhaupt eine Datei angegeben bzw. ausgewählt hat.
Anschließend kontrolliert die Prozedur das Vorhandensein der angegebenen Datei. Die dazu verwendete Prozedur können Sie der Beispieldatenbank entnehmen.
Schließlich startet ein Aufruf die Funktion zum Importieren der gewünschten Tabelle(n). Sie lernen in den folgenden Kapiteln unterschiedliche Vorgehensweisen kennen, die für verschiedene Einsätze verwendbar sind.
Zuvor jedoch lernen Sie ein wichtiges Feature von Excel kennen: die Möglichkeit, bestimmte Bereiche zu markieren und mit einem Namen zu versehen.
Excel bietet dem Anwender die Möglichkeit, unterschiedliche Bereiche festzulegen und sie zu benennen. Eine der bekanntesten Anwendungen der Benennung von Bereichen ist der so genannte Druckbereich. Der Anwender möchte meist nicht den ganzen Inhalt eines Tabellenblattes ausdrucken, da umfangreiche Kalkulationen meist noch Berechnungsfelder außerhalb der eigentlichen Informationen besitzen. Daher kann er festlegen, welchen Bereich des Tabellenblattes Excel ausdrucken soll.
Das geschieht, indem der Anwender den gewünschten Bereich markiert und anschließend den Menübefehl Datei ( Druckbereich ( Druckbereich festlegen ausführt (siehe Bild 2).
Der Bereich erhält nun den Namen Druckbereich. Sie können einem beliebigen Bereich auch einen selbst ausgewählten Namen zuweisen. Dazu markieren Sie den gewünschten Bereich, klicken anschließend in das Feld, das normalerweise den Zellnamen anzeigt, und geben den Namen des Bereichs ein (siehe Bild 3).
Es fehlt noch die einfachste Form der Benennung eines Bereiches: Sie findet im Register der einzelnen Tabellenblätter statt. Hier können Sie jedem einzelnen Tabellenblatt einen aussagekräftigeren Namen als beispielsweise Tabelle1 geben (siehe Bild 4). Der Bereichsname bezieht sich dann jeweils auf das ganze Tabellenblatt.
Bild 5: Auswahl eines Druckbereichs in Excel
Schließlich können Sie sämtliche Bereiche der aktuellen Excel-Datei anzeigen lassen. Dazu klicken Sie einfach auf das Kombinationsfeld zur Eingabe der Bereichsnamen (siehe Bild 5). Sie können einen Bereich anzeigen, indem Sie auf seinen Namen klicken.
Die folgende VBA-Prozedur ist dafür ausgelegt, den Druckbereich einer Tabelle aus einer Excel-Datei einzulesen. Schon das Einlesen einer Tabelle erspart dem Anwender eine Menge Zeit, da er die entsprechenden Informationen nicht jedes Mal neu mit dem Assistenten eingeben muss.
Nach der Auswahl der gewünschten Excel-Datei soll ein Mausklick auf die Schaltfläche Importieren den Import der festgelegten Tabelle initiieren.
Vorbereiten einer geeigneten Excel-Datei
Damit Sie das folgende Beispiel genau nachvollziehen können, erstellen Sie am besten eine neue Excel-Datei und exportieren aus der Nordwind-Datenbank die beiden Tabellen Kunden und Personal in die neue Excel-Datenbank.
Alternativ können Sie auch die auf der Heft-CD befindliche Excel-Datei Nordwind.xls verwenden.
Hier können Sie nun wahllos einige Bereiche festlegen. Definieren Sie aber auf jeden Fall einige Zeilen der Tabelle Kunden als Druckbereich, da der Druckbereich im folgenden Beispiel Verwendung findet. Achten Sie darauf, dass Sie nicht über das Ziel hinausschießen und leere Zeilen oder Spalten markieren.
Das könnte unter Umständen Probleme mit sich bringen – beispielsweise wenn leere Felder in die Felder einer Tabelle importiert werden, für die eine Eingabe erforderlich ist oder wenn die Markierung Felder enthält, die gar nicht in der Zieltabelle vorhanden sind.
Quellcode 2 enthält die Funktion ImportTabelle, die zum Import einer Tabelle dient. Die genauen Informationen zum Import werden mit den folgenden drei Parametern übergeben:
Auswahl des Tabellennamens
Der Tabellenname kann entweder der Name einer bestehenden Tabelle sein oder ein Tabellenname, der noch nicht vergeben ist.
Im Falle einer bestehenden Tabelle versucht die Funktion, die Datensätze der Excel-Tabelle an die Tabelle anzuhängen. Beim Versuch, Datensätze mit bereits bestehendem Index anzuhängen, er-scheint eine entsprechende Meldung (siehe Bild 6).
Falls es noch keine Tabelle mit dem angegebenen Namen gibt, erstellt die TransferSpreadsheet-Methode eine neue Tabelle.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo