Anzeige
Archiv - Navigation
1640to1644
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA-Import von Accessdaten in Excel Indexfehler

VBA-Import von Accessdaten in Excel Indexfehler
18.08.2018 12:03:56
Accessdaten
Hallo Leute,
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!

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Daten aus Access auslesen,...
18.08.2018 12:43:07
Case
Hallo, :-)
... da könntest Du mal hier vorbeischauen: ;-)
Excel - Access - Daten holen...
Habe mir jetzt deinen Code nicht genau angeschaut, aber du findest sicher in dem Link etwas. Ggf. musst Du halt auch mal etwas nach unten scrollen bzw. am Ende auf "Ältere Posts" klicken. Häufig sind auch Beispieldateien dabei. ;-)
Servus
Case

AW: Daten aus Access auslesen,...
18.08.2018 12:47:09
Mike
Hallo Case,
danke für den Link!
Die Seite kannte ich noch nicht und wurde auch schon fündig, zumindestens was einen Eintrag betrifft.
Ist war etwas umständlicher zu schreiben aber wenn's klappt dann soll's mir Recht sein :)
Danke nochmals!
LG
Mike
Anzeige
AW: VBA-Import von Accessdaten in Excel Indexfehler
18.08.2018 12:52:28
Accessdaten
Hallo Mike,
ins Blaue.
Modul Modul1
Option Explicit 
 
Sub DatenHolen() 
  Const cstrDB_File As String = "F:\_HO-Daten\Faktdat97.accdb"  'Datenbankdatei 
  Const cstrDB_Table As String = "Be_Kassa_Detail"              'Tabellenname in der Datenbank 
  Dim objADO As Object 
 
  With Sheets("Be_Kassa_Detail") 
    .Cells.Clear 
    Application.Goto .Range("A1"), True 
   
    Set objADO = ADO_Access(cstrDB_File, cstrDB_Table) 
     
    If Not objADO Is Nothing Then 
      .Range("A1").CopyFromRecordset objADO 
      objADO.Close 
    End If 
  End With 
 
  Set objADO = Nothing 
End Sub 
 
Private Function ADO_Access(ByVal dbFile As String, ByVal TableName As String, Optional Fields As String = "*", Optional WhereString As String = "") As Object 
  Dim objCon As Object 
  Dim SQL As String, Con As String 
 
  On Error GoTo ErrorHandler 
 
  If ((GetAttr(dbFile) And vbDirectory) <> vbDirectory) Then 
    Con = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & dbFile & ";" & _
      "Jet OLEDB:Engine Type=5;" & "Persist Security Info=False;" 
 
    Set objCon = CreateObject("ADODB.Connection") 
 
    objCon.Open Con 
 
    SQL = "select " & Fields & " from [" & TableName & "]" & WhereString & ";" 
 
    Set ADO_Access = CreateObject("ADODB.Recordset") 
 
    ADO_Access.Open SQL, objCon, 3, 4, 1 
  End If 
 
  Exit Function 
 
ErrorHandler: 
  Set ADO_Access = Nothing 
End Function 
 
 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


ansonsten lade mal eine Beispieldatenbank hoch.
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: VBA-Import von Accessdaten in Excel Indexfehler
18.08.2018 12:58:27
Accessdaten
Hallo Sepp,
danke für Deinen Code-Vorschlag, er hat auf Anhieb funktioniert!
Die Unterstützung in diesem Forum ist großartig :)
Ein angenehmes Restwochenende wünsche ich!
LG
Mike

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige