Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Access Daten Import mit VBA

Access Daten Import mit VBA
11.02.2005 10:30:36
Dirk
Hallo,
ich habe folgendes Problem:
Daten, die in Access erstellt werden, müssen in Excel ausgewertet werden. Der Name der Access-Datei ändert sich, die Struktur aber nicht.
Ich habe ein Makro (s.u.) erstellt (aufgezeichnet und anschließend editiert), was den Dateinamen mit GetOpenFile in eine Variable liest und diese Variable dann bei dem Importvorgang überall einsetzt.
Dummerweise kommt immer die Fehlermeldung, dass die Datei (die in der Variable steht / Kontrolle durch MsgBox) nicht gefunden wurde. Es wird sogar eine Alternativdatei angeboten, die den gleichen Namen trägt.
Ich komm nicht weiter ... bitte helft mir!
----------------------
Das Makro: (Dateivariable ist 'datei')
______________________

Sub Import()
datei = Application.GetOpenFilename
MsgBox datei
With ActiveSheet.QueryTables.Add(Connection:=Array( _
"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=datei;Mode=Share Deny Write;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLED" _
, _
"B:Database Password="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:G" _
, _
"lobal Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=F" _
, _
"alse;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False" _
), Destination:=Range("A1"))
.CommandType = xlCmdTable
.CommandText = Array("Drops")
.Name = "Daten"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceDataFile = datei
.Refresh BackgroundQuery:=False
End With
End Sub

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Access Daten Import mit VBA
11.02.2005 11:04:01
Heinz
Hallo Dirk,
statt
...Data Source=datei;Mode...
muss es heißen:
...Data Source=" & datei & ";Mode...
Gruß
Heinz
AW: Access Daten Import mit VBA
11.02.2005 11:15:40
Dirk
Hallo und Danke!
Leider kommt jetzt die Fehlermeldung "Typen unverträglich". Ich habe die Variable Datei als Variant und auch als String definiert .... hat aber leider nichts gebracht :-(
Anzeige
AW: Access Daten Import mit VBA
11.02.2005 11:25:40
Heinz
Hallo Dirk,
ich habe meine Abfragen mit ODBC gemacht. Da funktioniert das so:

Sub Abfrage()
Dim wsE As Worksheet, wsA As Worksheet, UZ$, datei$, datei2$
Application.ScreenUpdating = False
datei = "C:\Programme\Microsoft Office\Office\Samples\Nordwind.mdb"
datei2 = datei & ".mdb"
With wsA.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=Microsoft Access-Datenbank;DBQ=" & datei2 & ";DefaultDir=C:\Programme\Microsoft " _
), Array( _
"Office\Office\Samples;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;" _
)), Destination:=wsA.Range("A1"))
.CommandText = Array( _
"SELECT Lieferanten.`Lieferanten-Nr`, Lieferanten.Firma, Lieferanten.Kontaktperson, Lieferanten.Position, Lieferanten.Straße, Lieferanten.Ort, Lieferanten.Region, Lieferanten.PLZ, Lieferanten.Land, Lie" _
, _
"feranten.Telefon" & Chr(13) & "" & Chr(10) & "FROM `" & datei & "`.Lieferanten Lieferanten" & Chr(13) & "" & Chr(10) & "WHERE (Lieferanten.`Lieferanten-Nr`=" & UZ & ")" _
)
.Name = "Abfrage von Microsoft Access-Datenbank"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
Application.ScreenUpdating = True
End Sub

Worin der Unterschied in deinem Fall besteht, kann ich leider nicht sagen.
Gruß
Heinz
Anzeige
AW: Access Daten Import mit VBA
Dirk
Hallo Heinz,
vielen Dank. Ich habe durch Zufall den Rechner gewechselt (größerer Bildschirm war sinnvoller) und da lief die erste Variante direkt (ohne ODBC). Auf einem weiteren Rechner auch ... nur halt auf meinem Stammrechner nicht! Und das wohlgemerkt bei gleicher Excel Version. Verstehe wer will!
Habe dieses Forum übrigens das erste mal benutzt und bin sehr angenehm überrascht wie schnell und klasse das funktioniert!
Danke,
Dirk
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Access Daten Import mit VBA


Schritt-für-Schritt-Anleitung

Um eine Excel-Tabelle in Access zu importieren, kannst du folgendes VBA-Makro verwenden. Achte darauf, dass du den Dateinamen korrekt übergibst:

Sub Import()
    Dim datei As String
    datei = Application.GetOpenFilename
    MsgBox datei
    With ActiveSheet.QueryTables.Add(Connection:=Array( _
        "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" & datei & ";Mode=Share Deny Write;Extended Properties="""";" _
        ), Destination:=Range("A1"))
        .CommandType = xlCmdTable
        .CommandText = Array("Drops")
        .Name = "Daten"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .SourceDataFile = datei
        .Refresh BackgroundQuery:=False
    End With
End Sub

Hierbei wird der Dateiname dynamisch durch die GetOpenFilename-Methode ermittelt und in der Connection-Zeile korrekt verwendet.


Häufige Fehler und Lösungen

  1. Fehlermeldung "Datei nicht gefunden": Stelle sicher, dass die Verbindung zur Datei korrekt ist. Der Dateiname muss in der Connection-Zeile mit & datei & eingefügt werden.

  2. "Typen unverträglich": Überprüfe, ob die Variable datei als String deklariert ist. Manchmal kann es helfen, die Variable explizit als String zu definieren, um Typkonflikte zu vermeiden.

  3. Zugriffsprobleme: Wenn du die Fehlermeldung erhältst, dass die Datei nicht geöffnet werden kann, überprüfe die Berechtigungen und stelle sicher, dass die Datei nicht von einem anderen Prozess verwendet wird.


Alternative Methoden

Falls du eine CSV-Datei in Access importieren möchtest, kannst du die Importfunktion in Access nutzen. Alternativ dazu kannst du auch VBA verwenden, um CSV-Dateien direkt zu importieren:

Sub ImportCSV()
    Dim csvFile As String
    csvFile = Application.GetOpenFilename("CSV Files (*.csv), *.csv")
    If csvFile <> "False" Then
        ' Führe den Import durch
        DoCmd.TransferText acImportDelim, , "DeineTabelle", csvFile, True
    End If
End Sub

Diese Methode ist besonders nützlich, wenn du regelmäßig CSV-Dateien importieren musst.


Praktische Beispiele

Ein praktisches Beispiel könnte der Import von Daten aus der nordwind.mdb-Datei sein. Hier ist ein Beispiel, wie du die Daten abrufen kannst:

Sub Abfrage()
    Dim wsA As Worksheet
    Set wsA = ThisWorkbook.Sheets("Daten")
    Dim datei As String
    datei = "C:\Programme\Microsoft Office\Office\Samples\nordwind.mdb"

    With wsA.QueryTables.Add(Connection:=Array( _
        "ODBC;DSN=Microsoft Access-Datenbank;DBQ=" & datei & ";DriverId=25;FIL=MS Access"), _
        Destination:=wsA.Range("A1"))
        .CommandText = Array("SELECT * FROM Lieferanten")
        .Refresh BackgroundQuery:=False
    End With
End Sub

Hiermit kannst du alle Lieferantendaten aus der Nordwind-Datenbank abrufen.


Tipps für Profis

  • Verwende Fehlerbehandlung: Implementiere On Error Resume Next, um die Fehlersuche zu erleichtern.
  • Optimierung der Abfragen: Achte darauf, dass deine SQL-Abfragen optimiert sind, um die Leistung zu verbessern.
  • Automatisierung: Du kannst VBA nutzen, um regelmäßig Daten zu importieren, z.B. durch das Einrichten eines Timers.

FAQ: Häufige Fragen

1. Wie kann ich Daten aus einer CSV-Datei in Access importieren?
Du kannst die DoCmd.TransferText-Methode verwenden, um eine CSV-Datei in eine Access-Tabelle zu importieren.

2. Welche Excel-Version benötige ich für diesen VBA-Code?
Der bereitgestellte Code funktioniert mit Excel 2007 und höher, da die OLEDB-Verbindung in diesen Versionen unterstützt wird.

3. Was kann ich tun, wenn mein Makro nicht funktioniert?
Überprüfe zuerst die Syntax deines Codes und stelle sicher, dass alle Verweise korrekt sind. Verwende Debugging-Tools in VBA, um den Fehler genauer zu lokalisieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige