|  | Unser Angebot für Sie! Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'! |
| |
Zusammenfassung
Importieren Sie Excel-Daten mit der DoCmd.TransferSpreadsheet-Methode
Techniken
Excel, VBA
Voraussetzungen
Access 2000 oder höher
Beispieldateien
-
Shortlink
692
Excel-Daten importieren mit TransferSpreadsheet
André Minhorst, Duisburg
Die TransferSpreadsheet-Methode des DoCmd-Objekts ist die erste Wahl, wenn es um das Importieren von Excel-Daten per VBA geht. Und auch wenn die Online-Hilfe diese Methode auf einer Bildschirmseite abhakt, gibt es doch einiges mehr zum praktischen Umgang damit zu berichten.
Grundsätzlich können Sie mit der TransferSpreadsheet-Methode nicht nur Daten importieren, sondern auch Verknüpfungen mit Excel-Tabellen erstellen und Daten aus Access-Tabellen nach Excel exportieren. Wir wollen uns in diesem Beitrag jedoch auf den Import konzentrieren. Die Syntax der TransferSpreadsheet-Methode sieht so aus (es gibt noch einen letzten Parameter, der aber nicht verwendet wird):
DoCmd.TransferSpreadsheet(<Transfertyp>, <Dateiformat>, <Tabellenname>, <Dateiname>, <Besitzt Feldnamen>, <Bereich>)
Da wir mit TransferSpreadsheet Daten aus Excel importieren möchten, kommt uns der erste Parameter ganz recht: Mit ihm legen Sie die Art des Datentransfers fest. Dazu verwenden wir den Parameter acImport (die übrigen Konstanten lauten acExport und acLink).
Als Nächstes müssen wir der Methode mitteilen, mit welcher Excel-Version wir es zu tun haben. Wenn Sie die TransferSpreadsheet-Methode für sich selbst verwenden, werden Sie wissen, mit welcher Excel-Version Sie arbeiten. Wenn Sie diese aber in eine Software einbauen, die Sie weitergeben möchten, ist dies möglicherweise nicht der Fall: Dann kann es durchaus vorkommen, dass nicht die gewünschte Excel-Version vorliegt. Also müssen wir herausfinden, um welche Version es sich handelt. Eine einfache Variante erfordert das Erzeugen einer Excel-Instanz und sieht so aus:
Public Function ExcelVersion() As String
Dim objExcel As Excel.Application
On Error Resume Next
Set objExcel = _
CreateObject("Excel.Application")
If Err.Number = 0 Then
With objExcel
ExcelVersion = .Version
End With
End If
objExcel.Quit
Set objExcel = Nothing
End Function
Die letzten beiden Zeilen sind theoretisch nicht notwendig, weil die Excel-Instanz mit dem Verlassen des Gültigkeitsbereichs der Variablen objExcel ohnehin zerstört wird, aber Ordnung muss sein. Die obige Funktion liefert für Access 2007 beispielsweise den Wert 12.0 zurück - das ist nicht der Wert, den die TransferSpreadsheet-Methode für den Parameter SpreadsheetType erwartet. Die möchte vielmehr eine der dafür vorgesehenen Konstanten sehen, also beispielsweise acSpreadsheetTypeExcel12, was dem Zahlenwert 9 entspricht. Wie aber gelangen wir von einem String-Ausdruck wie 12.0 zu einer Konstanten wie acSpreadsheetTypeExcel12? Wir werden hier wohl nicht um den Einsatz eines Mappings herumkommen, das wie folgt aussieht:
Public Function GetSpreadsheet(strVersion As _
String)
Dim intSpreadsheetType As Integer
Select Case Val(strVersion)
Case 12 'Excel 2007
intSpreadsheetType = 9
Case 11, 10, 9, 8 'Excel 97-2003
intSpreadsheetType = 8
End Select
GetSpreadsheetType = intSpreadsheetType
End Function
Excel-Versionen älter als Excel 97 werden hier nicht berücksichtigt.
Der folgende Parameter ist der Tabellenname der Zieltabelle. Hier können zwei Fälle auftreten: Entweder Sie geben eine Tabelle an, die bereits vorhanden ist, oder einen neuen Tabellennamen. Im ersten Fall fügt die TransferSpreadsheet-Methode die Daten an die angegebene Tabelle an, sonst erstellt sie die Tabelle automatisch neu.
Als Nächstes folgt der Name der Excel-Datei, aus der Sie Daten nach Access importieren möchten. Hier wissen Sie entweder von vornherein, wo die Datei liegt, oder Sie lassen den Benutzer dies auswählen (wie das funktioniert, zeigen wir beispielsweise im Beitrag Excel-Importassistent im Eigenbau, Shortlink 696).
|