Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Immer wieder mal benötigt man Daten aus externen Quellen wie Excel-Tabellen. Bei Quellen, die selbst noch keine Information über das Datenformat der jeweiligen Spalten mitliefern, kann es manchmal zu Problemen beim Verknüpfen kommen. Dieser Beitrag zeigt, wo es hakt und wie Sie solche Probleme umgehen können.
Das Verknüpfen von Daten aus Excel-Tabellen erledigen Sie beispielsweise mit dem dafür vorgesehenen Assistenten oder per VBA.
Beide Varianten können wie gewünscht funktionieren, aber gerade wenn die Daten von Dritten stammen, ist deren Integrität nicht unbedingt gewährleistet.
Die folgenden Abschnitte zeigen, wie Sie im Optimalfall auf die Daten zugreifen, ohne diese gleich nach Access zu importieren, und wie Sie vorgehen können, wenn nicht gleich alles nach Wunsch gelingt.
Verknüpfung per Assistent
Da die Möglichkeiten für den Aufruf der Assistenten zum Importieren etwa von Excel- oder Textdateien sich bei den aktuellen Access-Versionen stark unterscheiden, beschreiben wir hier einfach deren Aufruf per VBA. Sie können jedes Menü- oder Ribbonelement unter Access mit der RunCommand-Methode aufrufen. Dazu müssen Sie nur die entsprechende Konstante angeben, die in diesem Fall immer mit acCmdImportAttach… beginnt (s. Bild 1).
Bild 1: Aufruf des Import- und Verknüpfungsdialogs per VBA
Zum Importieren oder Verknüpfen einer Excel-Tabelle verwenden Sie also beispielsweise die Anweisung RunCommand acCmdImportAttachExcel, für den Import einer Textdatei RunCommand acCmdImportAttachText.
Mit dem Assistenten zum Verknüpfen von Excel-Tabellen führen Sie nach der Auswahl der Quelldatei nur drei Schritte durch:
- Auswahl des Bereichs,
- festlegen, ob die erste Zeile Spaltenüberschriften enthält, und
- Angabe des Namens der verknüpften Tabelle.
Das bedeutet, dass Access selbstständig erkennen muss, welchen Datentyp die Excel-Daten haben. Access ist dabei relativ faul: Es liest gerade mal die ersten paar Zeilen ein und entscheidet anhand der enthaltenen Daten, welchen Datentyp eine Spalte liefert. Dieser Datentyp wird dann für die Verknüpfung verwendet, was dazu führt, dass etwa eine Spalte, die in den ersten paar Zeilen nur Zahlen enthält, auch mit dem Datentyp Zahl versehen wird. Taucht dann ein paar Zeilen weiter unten eine Zeichenfolge auf, wird diese schlicht nicht importiert.
Verknüpfung per TransferSpreadsheet
Zum Verknüpfen von Excel-Tabellen verwenden Sie alternativ die DoCmd-Methode TransferSpreadsheet. Diese Methode erwartet die folgenden Parameter:
- TransferType: Gibt die Transfermethode an, zum Beispiel acExport, acImport oder acLink. Zum Verknüpfen verwenden Sie acLink.
- SpreadsheetType: Typ der Datenherkunft, für Excel 2007 beispielsweise acSpreadsheetTypeExcel12
- TableName: Name der zu erstellenden Verknüpfung
- FileName: Pfad und Name der Excel-Datei
- HasFieldNames: Gibt an, ob die erste Zeile Feldnamen enthält
- Range: Bereich, zum Beispiel Tabelle1, Tabelle1$A:A oder Tabelle2$A1:C3
- UseOA: wird nicht unterstützt
Damit können Sie das Verknüpfen mit einer Excel-Tabelle genau so abbilden, wie Sie es sonst mit dem Assistenten erledigen würden.
Probleme mit dem Datentyp
Access legt auch beim Verknüpfen von Daten entsprechende Datentypen fest.
Dies können Sie prüfen, indem Sie die erste Tabelle der Beispieldatei Verknuepfungen.xls aus Bild 2 mit der folgenden Anweisung verknüpfen:
Bild 3: Formatieren der Zellen einer Excel-Tabelle
DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel9, "tblBeispiele", CurrentProject.Path & "\Verknuepfung.xls", True, "Tabelle1$"
Die Spalten dieser Tabelle sind jeweils wie im Spaltenkopf beschrieben formatiert. Die spaltenweise Formatierung nehmen Sie vor, indem Sie den Spaltenkopf markieren und den Eintrag Zellen formatieren aus dem Kontextmenü auswählen. Daraufhin erscheint der Dialog aus Bild 3, mit dem Sie die gewünschte Formatierung festlegen können.
Bild 2: Exceltabelle mit formatierten Beispieldaten
Im ersten Beispiel haben wir alle Spalten entsprechend formatiert. Deshalb sieht die Entwurfsansicht der verknüpften Tabelle auch wie in Bild 4 aus: Alle Datentypen wurden nach den Vorgaben übernommen. Im Falle der Werte Wahr und Falsch hat Access sogar den Datentyp Ja/Nein erkannt und umgesetzt; bei der Spalte, welche die Werte Ja und Nein enthielt, geschah dies leider nicht.
Bild 4: Eine verknüpfte Tabelle in der Entwurfsansicht
Wenn Inhalte nicht dem angegebenen Format entsprechen
An den Formatierungen orientiert sich Access beim Verknüpfen übrigens sehr konsequent. In der Tabelle Formatierte Felder, unsauber I des Excel-Dokuments haben wir die als Dezimalzahl formatierte Spalte einmal komplett mit Texten gefüllt. Das Resultat ist eindeutig, wie Bild 5 zeigt: Das Feld der Verknüpfung wird weiterhin als Zahl formatiert. Demzufolge wird statt der eigentlichen Inhalte der Ausdruck #Zahl! angezeigt.
Bild 5: Texte werden nicht als solche erkannt, wenn die Formatierung eine Zahl vorgibt.
Spalten ohne Formatvorgabe
Und was passiert, wenn die Quelldatei überhaupt keine Formatierung mitliefert Dann prüft Access standardmäßig nur die ersten acht Zeilen, um den Datentyp der Felder der Verknüpfung zu ermitteln. Wenn alle der ersten acht Felder den gleichen Datentyp aufweisen, ist dies kein Problem. Etwa bei Zahlen legt Access die Datentypen auch recht großzügig aus (Feldgröße Double). Bei langen Texten verwendet die Verknüpfung nicht den Datentyp Text, sondern Memo.
Schauen wir uns nun an, was geschieht, wenn die ersten acht Felder Daten unterschiedlicher Formate enthalten (s. Bild 6).
Bild 6: Beispiele für verschiedene Daten in den ersten acht Feldern
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo