Excelimport in Access per Knopfdruck

Hallo liebe wer-weiss-was-Gemeinde,

ich bin es mal wieder und stehe wie immer vor einem unüberwindbaren Problem aus meiner Perspektive betrachtet.

Ich habe eine MS Access DB (2003) und habe dort ein Startmenü, auf diesem Menü möchte ich gerne einen Button einfügen, der mir Externe Daten aus einer Excel-Tabelle in zwei bestehende Tabellen importiert.
Dabei handelt es sich um zwei verschiedene Tabellenblätter innerhalb der Excel-Datei, die jeweils in eine eigene Tabelle abgespeichert werden sollen.
Um das ganze so flexible wie Möglich zu halten, soll im ersten Schritt, nach betätigung des Buttons, der User gefragt werden wo die Datei den liegt. Dann soll der User so wie beim Dateien abspeichern, bequem den Pfad einklicken wo sich die Datei befindet. Damit kann die Datei ja im Prinzip so heißen wie sie will.
Dann soll die angegebene Datei untersucht werden, ob diese beiden Tabellenblätter in Ihr enthalten sind. Sind sie es dann sollen sie importiert werden, sind sie es nicht dann soll eine Message an den User, ob er sich vielleicht vertan hat.

Ich brauch eine kleine Starthilfe.

Wäre echt nett wenn mir da jemand weiterhelfen könnt.

Liebe Grüße shiny

Hallo,

das Problem wird wohl nur mit VBA gelöst werden können.

Die einfachste Variante für die Abfrage des Dateinamens der Excel-Datei wird eine Importbox sein. Hier muß allerdings der vollständige Pfad mit Dateiendung eingegeben werden (z.B. „C:\Dateien\Tabelle.xls“)
Es gibt alternativ Möglichkeiten per VBA den Windows-Open-Dialog aufzurufen und den Dateinamen an die Routine zu übergeben. (sh. bspw. http://www.donkarl.com/FAQ/FAQ8Kommunikation.htm). Diese Möglichkeiten einzubinden macht allerdings etwas mehr Aufwand.
Über die Methode „TransferSpreadsheet“ können die Exceldateien eingelesen werden. Die Access-Hilfe gíbt hier Informationen über die notwendigen Parameter.
Wird die unten aufgeführte Routine mehrfach aufgerufen, werden die Daten u.U. mehrfach eingelesen. Ist dies nicht erwünscht, vor Aufruf der Prozedur die Importtabellen löschen.

Sub ExceldatenEinlesen()
Dim dateiname

'einfachste Variante Importbox, kann ersetzt werden durch Öffnendialog
dateiname = InputBox("Bitte Dateinamen eingeben:")
If dateiname = "" Then Exit Sub

On Error GoTo Fehler
'Form Importbefehl:
 'DoCmd.TransferSpreadsheet acImport, \_
 Konstante für Excelversion (sh. Hilfe zu Transferspraedsheet), \_
 Name der anzulegenden Tabelle, \_
 Dateiname der Exceldatei, \_
 Spaltenköpfe (ja/nein), \_
 Bereich aus Excel (z.B. "Tabelle1!" für Tabellenblatt 1)

'1. Tabelle lesen aus Tabellenblatt 1
 DoCmd.TransferSpreadsheet acImport, 8, "Importtabelle1", dateiname, True, "Tabelle1!"
'2. Tabelle lesen aus Tabellenblatt 2
 DoCmd.TransferSpreadsheet acImport, 8, "Importtabelle2", dateiname, True, "Tabelle2!"
On Error GoTo 0
MsgBox "Import abgeschlossen!"
Exit Sub

Fehler:
If Err.Number = 3125 Then
 MsgBox "Die Exceldatei entspricht nicht dem erwarteten Aufbau!" & Chr(13) & \_
 "Der Import wird abgebrochen!"
Else
 On Error GoTo 0
 Resume ' Standardfehlermeldung ausgeben
End If
Exit Sub
End Sub

Hallo tester,

vielen Dank erstmal, ich hoffe ich bekomm da jetzt was hin, aber ich habe ja super Hilfe bekommen.
Danke Danke Danke :smile:

Viele Grüße
shiny

Bitteschön!
Mir ist allerdings aufgefallen, dass ich einen Begriff vertauscht habe. Es muß nicht heißen Importbox sondern Inputbox.
In der Programmierung ist aber der richtige Befehl enthalten.