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


gesamter Thread:

 RSS-Feed dieser Diskussion

powered by my little forum