VBA-Import von Accessdaten in Excel Indexfehler
18.08.2018 12:03:56
Accessdaten
ich habe mir ein Skript für Excel 2013 erstellt, welches mir die Daten aus einer Access-Datenbank (Access 2013) ziehen und entsprechend für schnelle Auswertungen aufbereiten soll.
Dazu öffne ich den jeweiligen Sheet, leere erst das Zielblatt und setze die aktive Zelle im jeweiligen Blatt auf A1.
Das Import-Macro hab ich mit der Macroaufzeichnung erstellt, lässt sich aber nicht ausführen. Der Datenimport wurde von mir so eingestellt, dass keine permanente Verbindung zur Datenbank besteht (Register "Daten", "Aus Access importieren", "Daten importieren"-Fenster -> Eigenschaften -> Haken bei "Aktualisierung im Hintergrund zulassen" und "Bei 'Alle aktualisieren' diese Verbindung aktualisieren" sind deaktiviert).
Ich bin zwar mit Excel-VBA recht gut vertraut, allerdings mit Datenbank-Anbindungen so gut wie überhaupt nicht. Aus dem erzeugten Code der Macroaufzeichnung werde ich nicht schlau...
Beim Ausführen des Macros erhalte ich folgenden Fehler:
ActiveWorkbook.Connections("Faktda.. = (Index außerhalb des gültigen Bereichs)
Habe zur Sicherheit nochmal den Namen der anzusprechende Access-Datei überprüft, der ist korrekt, das manuelle Einbinden der Datenbank funktioniert problemlos (sollte daher nicht an der ACCDB-Datie liegen).
Hatte darauf hin in Excel im Register "Daten" in "Verbindungen" reingesehen - es sind keine hinterlegten Verbindungen vorhanden (war von mir auch so beabsichtigt, da die Access-Datei nicht zwangsläufig vorhanden sein muss und die Daten nur bei Aufruf geholt werden sollen).
Der Fehler tritt in diesem Teilskript auf (Skript enthält nur einen Import, die restlichen hab ich derweil weggelassen da identisch):
Sub DatenHolen()
' Vorhandene Daten auf Ziel-Sheet entfernen:
Sheets("Be_Kassa_Detail").Select ' entspricht dem Sheet in Excel
Cells.Select
Selection.Delete Shift:=xlUp
Range("A1").Select
' Import aus Access in das aktuelle Blatt starten:
With ActiveWorkbook.Connections("Faktdat97").OLEDBConnection
.BackgroundQuery = False
.CommandText = Array("Be_Kassa_Detail")
.CommandType = xlCmdTable
.Connection = Array( _
"OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=F:\_HO- _
Daten\Faktdat97.accdb;Mode=Share Deny Write;Exten" _
, _
"ded 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;Jet OLEDB:New Databa" _
, _
"se Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False; _
Jet OLEDB:Don't Copy Locale on Compact=Fa" _
, _
"lse;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support _
Complex Data=False;Jet OLEDB:Bypass Use" _
, _
"rInfo Validation=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:Bypass ChoiceField _
Validation=False" _
)
.RefreshOnFileOpen = False
.SavePassword = False
.SourceConnectionFile = ""
.SourceDataFile = "F:\_HO-Daten\Faktdat97.accdb"
.ServerCredentialsMethod = xlCredentialsMethodIntegrated
.AlwaysUseConnectionFile = False
End With
With ActiveWorkbook.Connections("Faktdat97")
.Name = "Faktdat97"
.Description = ""
End With
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
"OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=F:\_HO- _
Daten\Faktdat97.accdb;Mode=Share Deny Write;Exten" _
, _
"ded 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;Jet OLEDB:New Databa" _
, _
"se Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False; _
Jet OLEDB:Don't Copy Locale on Compact=Fa" _
, _
"lse;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support _
Complex Data=False;Jet OLEDB:Bypass Use" _
, _
"rInfo Validation=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:Bypass ChoiceField _
Validation=False" _
), Destination:=Range("Be_Kassa_Detail!$A$1")).QueryTable
.CommandType = xlCmdTable
.CommandText = Array("Be_Kassa_Detail")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = "F:\_HO-Daten\Faktdat97.accdb"
.ListObject.DisplayName = "Tabelle_Faktdat97.accdb"
.Refresh BackgroundQuery:=False
End With
End Sub
Hat jemand von euch eine Ahnung was ich ändern muss, damit der automatische Import funktioniert?Danke!