Import aus Access in Excel (VBA)

MisterMo, Freitag, 27.09.2019, 09:53 (vor 26 Tagen)
bearbeitet von Martin Asal, Samstag, 28.09.2019, 12:55

Hallo,

ich versuche derzeit die Aktualisierung eines Excel-Sheets mit VBA zu automatisieren.
Die Daten werden aus einer Access-Tabelle importiert und dann in Excel weiterverarbeitet. Die Weiterverarbeitung funktioniert auch ganz gut, jetzt möchte ich auch noch den Import optimieren. Dafür habe ich mit dem Makro-Rekorder den Import aufgenommen.

Das Problem: Der Code greift jetzt immer auf eine bestimmte Datei in einem bestimmten Verzeichnis zu. Das möchte ich aber ändern, sodass man die Datei selber auswählen kann. Hier ist der Code:

Dim strPath As String
Dim WindExplorer As Object
 
Set WindExplorer = Application.FileDialog(msoFileDialogOpen)                                                    
WindExplorer.AllowMultiSelect = False                                                                          
WindExplorer.InitialFileName = "W:\Excel\"
WindExplorer.Show
 
If WindExplorer <> 0 Then                                                                                 
    strPath = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)                                   
 
    If (LCase(strPath) Like LCase("*Bestandsübersicht*")) Then                                   
 
        With Worksheets("Datenbank Import").ListObjects.Add(SourceType:=0, Source:=Array( _
        "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=strPath;Mode=Sha" _
        , _
        "re Deny Write;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet " _
        , _
        "OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;J" _
        , _
        "et OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy L" _
        , _
        "ocale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;J" _
        , "et OLEDB:Bypass UserInfo Validation=False"), Destination:=Range("$A$1")). _
        QueryTable
        .CommandType = xlCmdTable
        .CommandText = Array("Bestandsübersicht")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceDataFile = strPath
        .ListObject.DisplayName = "Tabelle_Bestandsübersicht.accdb"
        .Refresh BackgroundQuery:=False
    End With

Ich hab nur zweimal das Zielverzeichnis mit der String-Variablen ausgetauscht.

Wenn ich den Code durchlaufen lasse, bekomme ich die Meldung, dass die Datei nicht gefunden wurde obwohl das Verzeichnis stimmt. Habe ich irgendwas übersehen?

Viele Grüße
MisterMo

Import aus Access in Excel

Martin Asal @, Samstag, 28.09.2019, 13:08 (vor 25 Tagen) @ MisterMo

Hallo Mo,

zwei Dinge, die mir aufgefallen sind:

Es ist ein Unterschied, ob du schreibst: x = "Hallo Welt" oder

Welt= "Das ist die Welt"
x = "Hallo " & Welt

Demzufolge genügt es nicht, einfach den Namen der Variablen strPath in den String aufzunehmen ;-)

Die zweite Sache:

Ich hab nur zweimal das Zielverzeichnis mit der String-Variablen ausgetauscht.

Damit wären also Quelle und Ziel identisch?!

Martin

Import aus Access in Excel

MisterMo, Montag, 30.09.2019, 09:10 (vor 23 Tagen) @ Martin Asal

Hallo Martin,

vielen Dank schon mal für deine Antwort. Ich blicke bei dem Code, der mit dem Makro-Rekorder aufgenommen wurde, noch nicht so wirklich durch.. Und da die Zieldatei mit ihrem Verzeichnis zweimal im Code vorkommt, habe ich einfach versucht, sie mit der Variablen strPath zu ersetzen...

Wie löse ich denn das Problem? Hättest du einen Vorschlag?

Viele Grüße
MisterMo

Import aus Access in Excel

Martin Asal @, Montag, 30.09.2019, 18:55 (vor 22 Tagen) @ MisterMo

Hallo Martin,

vielen Dank schon mal für deine Antwort. Ich blicke bei dem Code, der mit dem Makro-Rekorder aufgenommen wurde, noch nicht so wirklich durch.. Und da die Zieldatei mit ihrem Verzeichnis zweimal im Code vorkommt, habe ich einfach versucht, sie mit der Variablen strPath zu ersetzen...

Wie du das richtig ersetzt, habe ich ja in meiner ersten Antwort schon gezeigt.

Wie löse ich denn das Problem? Hättest du einen Vorschlag?

Du musst zweimal Application.FileDialog aufrufen; einmal um die Quelle, und einmal, um das Ziel auszuwählen.

Martin

Import aus Access in Excel

MisterMo, Dienstag, 01.10.2019, 10:00 (vor 22 Tagen) @ Martin Asal

Sorry, stand ziemlich auf dem Schlauch.

Jetzt klappt alles, wie es sollte.

Vielen Dank für die Hilfe und viele Grüße.

MisterMo

RSS-Feed dieser Diskussion
powered by my little forum