dr.cornwallis
Goto Top

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!!

Content-Key: 300322

Url: https://administrator.de/contentid/300322

Printed on: April 16, 2024 at 05:04 o'clock

Member: colinardo
Solution colinardo Mar 29, 2016 updated at 12:55:48 (UTC)
Goto Top
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.
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
Viele Grüße und Erfolg der Umsetzung deines Vorhabens
Grüße Uwe
Member: Dr.Cornwallis
Dr.Cornwallis Mar 29, 2016 at 13:14:56 (UTC)
Goto Top
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 face-smile.

Besten Dank und Lg
Member: Dr.Cornwallis
Dr.Cornwallis Mar 30, 2016 at 07:07:17 (UTC)
Goto Top
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
Member: colinardo
colinardo Mar 30, 2016 updated at 07:46:35 (UTC)
Goto Top
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.
Member: Dr.Cornwallis
Dr.Cornwallis Mar 31, 2016 at 12:02:46 (UTC)
Goto Top
Besten Dank für deine Hilfe, das Skript funktioniert nun tadellos!!
Member: Dr.Cornwallis
Dr.Cornwallis Mar 31, 2016 at 12:04:35 (UTC)
Goto Top
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.
Member: colinardo
Solution colinardo Mar 31, 2016 updated at 12:18:46 (UTC)
Goto Top
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 DateAdd

Für den obigen Code änderst du dann die obige Zeile so ab:
strCurrentSheet = PATH & "\" & Format(DateAdd("d",-7,Date), "dd.mm.yyyy") & ".xlsx"   
Grüße Uwe
Member: Biber
Biber Mar 31, 2016 updated at 12:22:24 (UTC)
Goto Top
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
Member: Dr.Cornwallis
Dr.Cornwallis Mar 31, 2016 at 12:35:47 (UTC)
Goto Top
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 face-wink, diese "FOR"-"NEXT" und "DO" - "WHILE sind mir einfach noch zu hoch(Tag 5).

@uwe:

Du bist der Besteface-smile


Danke euch!

Grüße

Dr.