Excel Tabelle in Access Datenbank
Liebe Gemeinde,
ich muss aus einer Excel Tabelle Daten in einen Access Table importieren, nun möchte ich die Excel mit Access verlinken, dabei entsteht aber folgendes Problem:
Die Excel wird täglich neu generiert(SAP), darum hätte ich gerne dass die Datenbank immer die aktuelle Excel Datei verwendet.
Ist es irgendwie möglich, dass Access immer die Datei mit dem aktuellen Datum im Dateinamen verwendet? zb. "Abfrage tt.mm.jjjj.xlsx"
Danke für eure Hilfe!!
ich muss aus einer Excel Tabelle Daten in einen Access Table importieren, nun möchte ich die Excel mit Access verlinken, dabei entsteht aber folgendes Problem:
Die Excel wird täglich neu generiert(SAP), darum hätte ich gerne dass die Datenbank immer die aktuelle Excel Datei verwendet.
Ist es irgendwie möglich, dass Access immer die Datei mit dem aktuellen Datum im Dateinamen verwendet? zb. "Abfrage tt.mm.jjjj.xlsx"
Danke für eure Hilfe!!
9 Antworten
- LÖSUNG colinardo schreibt am 29.03.2016 um 14:50:55 Uhr
- LÖSUNG Dr.Cornwallis schreibt am 29.03.2016 um 15:14:56 Uhr
- LÖSUNG Dr.Cornwallis schreibt am 30.03.2016 um 09:07:17 Uhr
- LÖSUNG colinardo schreibt am 30.03.2016 um 09:37:02 Uhr
- LÖSUNG Dr.Cornwallis schreibt am 31.03.2016 um 14:02:46 Uhr
- LÖSUNG Dr.Cornwallis schreibt am 31.03.2016 um 14:04:35 Uhr
- LÖSUNG colinardo schreibt am 31.03.2016 um 14:16:54 Uhr
- LÖSUNG Biber schreibt am 31.03.2016 um 14:21:13 Uhr
- LÖSUNG Dr.Cornwallis schreibt am 31.03.2016 um 14:35:47 Uhr
- LÖSUNG Dr.Cornwallis schreibt am 31.03.2016 um 14:04:35 Uhr
- LÖSUNG Dr.Cornwallis schreibt am 31.03.2016 um 14:02:46 Uhr
- LÖSUNG colinardo schreibt am 30.03.2016 um 09:37:02 Uhr
LÖSUNG 29.03.2016, aktualisiert um 14:55 Uhr
Hallo Dr.Cornwallis,
mit ein bisschen VBA importierst du dir die aktuelle Excel-Tabelle des Tages in eine Tabelle in deiner Datenbank. Das Makro kannst du dann bspw. beim Öffnen einmalig ausführen lassen.
Anzupassen sind Pfad zum Ordner in dem die Excel-Dateien liegen und den Namen der Tabelle in welchem immer die aktuellen Daten hineingeschrieben werden.
Die Tabelle von welcher der Namen angegeben werden muss wird, solange sie nicht vorhanden ist, von selbst erzeugt. Ist sie bereits vorhanden werden die eventuell vorhandenen Daten in der Tabelle gelöscht und dann die Daten aus der Excel-Tabelle importiert. Im jetztigen Zustand haben die Daten in den Excel-Tabellen in der ersten Zeile Überschriften (Wenn nicht, kann das in Zeile 25 durch ändern des letzten Parameters auf False geändert werden.
Viele Grüße und Erfolg der Umsetzung deines Vorhabens
Grüße Uwe
mit ein bisschen VBA importierst du dir die aktuelle Excel-Tabelle des Tages in eine Tabelle in deiner Datenbank. Das Makro kannst du dann bspw. beim Öffnen einmalig ausführen lassen.
Anzupassen sind Pfad zum Ordner in dem die Excel-Dateien liegen und den Namen der Tabelle in welchem immer die aktuellen Daten hineingeschrieben werden.
Die Tabelle von welcher der Namen angegeben werden muss wird, solange sie nicht vorhanden ist, von selbst erzeugt. Ist sie bereits vorhanden werden die eventuell vorhandenen Daten in der Tabelle gelöscht und dann die Daten aus der Excel-Tabelle importiert. Im jetztigen Zustand haben die Daten in den Excel-Tabellen in der ersten Zeile Überschriften (Wenn nicht, kann das in Zeile 25 durch ändern des letzten Parameters auf False geändert werden.
Sub ImportCurrentExcelData()
' Konstanten definieren
'Pfad in dem die Excel-Dateien liegen
Const PATH = "C:\Daten\SAP"
'Name der Tabelle in das die Daten importiert werden (vorhandene Daten werden vorher gelöscht)
Const TABLENAME = "MyExcelData"
'Variablen und Objekte initialisieren
Dim strCurrentSheet As String, def As TableDef
Set fso = CreateObject("Scripting.FileSystemObject")
'Warnungen abschalten
DoCmd.SetWarnings False
' Pfad für aktuelle Excel-Datei zusammensetzen (Dateinameformat DD.MM.YYYY.xlsx)
strCurrentSheet = PATH & "\" & Format(Date, "dd.mm.yyyy") & ".xlsx"
'Wenn Datei exisitiert ...
If fso.FileExists(strCurrentSheet) Then
'Prüfe ob Tabelle vorhanden ist, wenn ja lösche den Inhalt
For Each def In CurrentDb.TableDefs
If LCase(def.Name) = LCase(TABLENAME) Then
DoCmd.RunSQL "DELETE FROM " & TABLENAME
Exit For
End If
Next
' Starte dem Import der Daten (in diesem Fall haben die Spalten in der ersten Zeile Überschriften)
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, TABLENAME, strCurrentSheet, True
Else
' Ein Sheet mit aktuellem Datum existiert nicht
MsgBox "Ein Sheet mit dem aktuellen Datum existiert nicht", vbCritical
End If
'Warnunen wieder einschalten
DoCmd.SetWarnings True
End Sub
Grüße Uwe
LÖSUNG 29.03.2016 um 15:14 Uhr
Wow, vielen Dank für deine Antwort, das hilft enorm!!
Ich bin leider zum VBA Handkuss gekommen da ich der einzige EDVler im Unternehmen bin
.
Besten Dank und Lg
Ich bin leider zum VBA Handkuss gekommen da ich der einzige EDVler im Unternehmen bin
Besten Dank und Lg
LÖSUNG 30.03.2016 um 09:07 Uhr
Danke und HI Uwe,
wenn ich jetzt möchte dass die Datei als neue Tabelle importiert wird und den Inhalt der aktuellen nicht löscht, dann muss ich bei "DoCmd.RunSql "Delete FROM" ansetzen wenn ich das richtig verstanden habe?
Grüße Dr
wenn ich jetzt möchte dass die Datei als neue Tabelle importiert wird und den Inhalt der aktuellen nicht löscht, dann muss ich bei "DoCmd.RunSql "Delete FROM" ansetzen wenn ich das richtig verstanden habe?
Grüße Dr
LÖSUNG 30.03.2016, aktualisiert um 09:46 Uhr
Du lässt einfach die ganze FOR-Schleife weg (Zeilen 18-23), dann wird der Inhalt des tagesaktuellen Sheets immer an die vorhandene Access-Tabelle angehängt. Ist sie noch nicht vorhanden wird sie automatisch erstellt.
LÖSUNG 31.03.2016 um 14:02 Uhr
Besten Dank für deine Hilfe, das Skript funktioniert nun tadellos!!
LÖSUNG 31.03.2016 um 14:04 Uhr
Könntest du mir noch verraten wie ich folgendes realisieren kann:
ich möchte nicht die Excel vom aktuellen Datum, sondern die Excel von letzer Woche, kann ich da irgendwie diesen Parameter setzen?
zb. dd.mm.jjjj -7?
Danke !
Grüße
Dr.
ich möchte nicht die Excel vom aktuellen Datum, sondern die Excel von letzer Woche, kann ich da irgendwie diesen Parameter setzen?
zb. dd.mm.jjjj -7?
Danke !
Grüße
Dr.
LÖSUNG 31.03.2016, aktualisiert um 14:18 Uhr
Zitat von @Dr.Cornwallis:
ich möchte nicht die Excel vom aktuellen Datum, sondern die Excel von letzer Woche, kann ich da irgendwie diesen Parameter setzen?
zb. dd.mm.jjjj -7?
Kein Problem, um mit dem Datum zu rechnen gibt es die Funktion DateAddich möchte nicht die Excel vom aktuellen Datum, sondern die Excel von letzer Woche, kann ich da irgendwie diesen Parameter setzen?
zb. dd.mm.jjjj -7?
Für den obigen Code änderst du dann die obige Zeile so ab:
strCurrentSheet = PATH & "\" & Format(DateAdd("d",-7,Date), "dd.mm.yyyy") & ".xlsx"
LÖSUNG 31.03.2016, aktualisiert um 14:22 Uhr
Moin, Dr.Cornwallis,
wieviel Sekunden hätte es denn gedauert,
- in der Zeile 14 mal das Format(Date, "dd.mm.yyyy") in ein Format(Date-7, "dd.mm.yyyy") zu ändern und selbst zu testen?
- mal zu versuchen, eine For-Next ode Do While-Konstruktion über alle Datumsvariationen von Date-1 bis Date-7 zu basteln?
Grüße
Biber
wieviel Sekunden hätte es denn gedauert,
- in der Zeile 14 mal das Format(Date, "dd.mm.yyyy") in ein Format(Date-7, "dd.mm.yyyy") zu ändern und selbst zu testen?
- mal zu versuchen, eine For-Next ode Do While-Konstruktion über alle Datumsvariationen von Date-1 bis Date-7 zu basteln?
Grüße
Biber
LÖSUNG 31.03.2016 um 14:35 Uhr
Hi,
@Biber: hätt ich versucht, leider sah mein Ergebnis so aus:
strCurrentSheet = PATH & "\" & "Abfrage " & Format(Date, "dd.mm.yyyy(-7)") & ".xlsx"
Es ist gar nicht so einfach wenn man noch einen Plan von VBA hat.
Das war für meine VBA skills schon ein Doktorarbeit
, diese "FOR"-"NEXT" und "DO" - "WHILE sind mir einfach noch zu hoch(Tag 5).
@Uwe:
Du bist der Beste
Danke euch!
Grüße
Dr.
@Biber: hätt ich versucht, leider sah mein Ergebnis so aus:
strCurrentSheet = PATH & "\" & "Abfrage " & Format(Date, "dd.mm.yyyy(-7)") & ".xlsx"
Es ist gar nicht so einfach wenn man noch einen Plan von VBA hat.
Das war für meine VBA skills schon ein Doktorarbeit
@Uwe:
Du bist der Beste
Danke euch!
Grüße
Dr.