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

Forumthread: Access-Daten Import per VBA

Access-Daten Import per VBA
02.03.2007 14:44:00
Boris
Hallo,
ist es möglich (mit vertretbarem Aufwand) per VBA einzelne Datensätze/Daten aus einer umfassenden Access-Datenbank zu "ziehen"? Abbildung zur Erklärung:
Userbild
Also in etwa:
for i = 2 to ThisWorkbook.WorkSheets(1).Cells(1, 1).End(xlDown).Row
thisworkbook.worksheets(1).range("C" & i).value = ?
'hier soll jetzt die Bevölkerungszahl nach dem Schlüssel PLZ_Stadt in Access gesucht und eingetragen werden...
next i
Zur Erklärung:
Es muss immer wieder eine unterschiedliche Anzahl an Daten abgefragt werden. Die DB (bisher handelt es sich um eine Excel-Datei) enthält für alle PLZ/Städte Deutschlands z.B. die Bevölkerungszahl auf Stadt-Ebene, den Kaufkraft-Index auf PLZ-Ebene usw.
Die Daten sollen dann im Ergebnis in Excel vorliegen....
Gruß,
Boris
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Access-Daten Import per VBA
02.03.2007 20:32:00
Peter
Servus,
z.B. so. genaueres eingehen auf dein Problem ist ohne Kenntnisse der Access DB nicht möglich.
'Hinweiß für Verweise
'Verweis aus MS.Access V x.x Object Library muss aktiviert sein (getestet mit 10.0)
'Verweis auf DAO x.x Object Library muss aktiviert sein (getestet mit 3.6)
'Public Variablen
Public objDB As Object, myTab As Object
Public myRS As Recordset
Public wks(1) As Worksheet
Public strfield(3, 22) As String, FieldsArr() As String, TableArr() As String
Public lngFieldsC As Long
Public Sub basFields(ByVal myTable As String, ByVal TableNr As Integer, Modus As Boolean)
Dim lngCount As Long, arrCount As Long
Dim intFor As Integer
Dim SQL As String
On Error GoTo errHandler
'Konstante Variablen für Fields -
'Änderungen an Fields müssen hier vorgenommen werden !!!
'   Fields für Warengruppen
strfield(0, 0) = "[WGR_ID]":            strfield(0, 1) = "[Bezeichnung]"
strfield(0, 2) = "[Beschreibung]"
'   Fields für Rezeptdaten
strfield(1, 0) = "[Rezept_ID]":       strfield(1, 1) = "[Bezeichnung]"
strfield(1, 2) = "[WGR_ID]"
strfield(1, 3) = "[Zutaten_ID_1]":    strfield(1, 4) = "[Zutaten_ID_2]"
strfield(1, 5) = "[Zutaten_ID_3]":    strfield(1, 6) = "[Zutaten_ID_4]"
strfield(1, 7) = "[Zutaten_ID_5]":    strfield(1, 8) = "[Zutaten_ID_6]"
strfield(1, 9) = "[Zutaten_ID_7]":    strfield(1, 10) = "[Zutaten_ID_8]"
strfield(1, 11) = "[Zutaten_ID_9]":   strfield(1, 12) = "[Zutaten_ID_10]"
strfield(1, 13) = "[Zutaten_ID_11]":  strfield(1, 14) = "[Zutaten_ID_12]"
strfield(1, 15) = "[Zutaten_ID_13]":  strfield(1, 16) = "[Zutaten_ID_14]"
strfield(1, 17) = "[Zutaten_ID_15]":  strfield(1, 18) = "[Zutaten_ID_16]"
strfield(1, 19) = "[Zutaten_ID_17]":  strfield(1, 20) = "[Zutaten_ID_18]"
strfield(1, 21) = "[Zutaten_ID_19]":  strfield(1, 22) = "[Zutaten_ID_20]"
'   Fields für Zutatendaten
strfield(2, 0) = "[Zutaten_ID]":       strfield(2, 1) = "[Bezeichnung]"
strfield(2, 2) = "[Preis]"
'   Fields für Sonstigesdaten
strfield(3, 0) = "[Sonstiges_ID]":  strfield(3, 1) = "[Zutaten_ID]"
strfield(3, 2) = "[Rezept_ID]":     strfield(3, 3) = "[Verlust]"
strfield(3, 4) = "[Gewicht]"
'   Zuweisung der Worksheets
Set wks(0) = Sheets("Start_"): Set wks(1) = Sheets("DB_Ablage")
'   Access-File Initalisieren
Set objDB = Access.Application.DBEngine.OpenDatabase(wks(0).Range("N15").Value)
'   Zuweisung des/der Table
Set myTab = objDB.TableDefs(myTable)
'   Zuweisung des Schleifenmaximums für SQL Schleife
Select Case TableNr
Case 0: intFor = 2: Case 1: intFor = 22
Case 2: intFor = 2: Case 3: intFor = 4
End Select
'   Zuweisung des SQL
For lngCount = 0 To intFor
If lngCount = 0 Then 'Anfang
SQL = "SELECT " & myTab.Name & "." & strfield(TableNr, lngCount)
ElseIf lngCount = intFor Then 'Abschluss
SQL = SQL & ", " & myTab.Name & "." & strfield(TableNr, lngCount) & _
" FROM " & myTab.Name & ";"
Else
SQL = SQL & ", " & myTab.Name & "." & strfield(TableNr, lngCount)
End If
Next
'   Zuweisung des Recordset
Set myRS = objDB.OpenRecordset(SQL)
'   Fields in DB_Ablage schreiben
Do
For lngCount = 0 To intFor
If myRS.Fields(lngCount) <> "" Then _
wks(1).Cells(1 + arrCount, lngCount + 1).Value = _
myRS.Fields(lngCount)
Next
arrCount = arrCount + 1
myRS.MoveNext
Loop Until myRS.EOF
lngFieldsC = arrCount
'   Objekte entladen
myRS.Close: objDB.Close
Exit Sub
errHandler:
Debug.Print SQL & " / " & Len(SQL)
Debug.Print Err.Number; " / " & Err.Description
If Err.Number = 3021 And Modus Then
MsgBox "Es sind noch keine Daten in der Datenbank !", vbCritical, "Es können keine Daten _
eingelesen werden _
Else
'    MsgBox Err.Description, vbCritical, Err.Number
End If
End Sub

MfG Peter
Anzeige
AW: Access-Daten Import per VBA
05.03.2007 09:22:00
Boris
Hallo Peter,
danke für den Code, allerdings muss ich mich da erstmal durchfummeln, damit ich irgendetwas verstehe. Wäre sehr hilfreich, wenn ich dafür Testdateien vorliegen hätte, hast Du zufällig welche? :p
Muss denn die Access-DB geöffnet sein, oder funktioniert das auch aus einer geschlossenen Datei?
Gruß,
Boris
Anzeige
AW: Access-Daten Import per VBA
05.03.2007 15:51:00
Peter
Servus,
das Prob ist das die DB eine von mir erstellte ist und ich Sie dir leider nicht überlassen kann.
Acces muss dazu überhaupt nicht geöffnet sein.
P.S.: wenn du willst, poste deine E-Mail Addy und nach meiner Mail schickst du mir die DB, dann bau ich dir den Code um, natürlich nur wenn das datenschutz technisch machbar ist, aber KKZ´kann man normalerweise kaufen,also ?
MfG
Peter
Anzeige
AW: Access-Daten Import per VBA
06.03.2007 10:13:00
Boris
Holla,
die DB kann ich Dir leider auch nicht schicken. Ich denke, ich vertage das Problem erstmal, behalte es aber im Auge. In der Zwischenzeit werde ich das ganze nur mit Excel lösen...
Was ist KKZ?
Gruß, Boris
Kaufkraftkenziffer o.w.t.
06.03.2007 11:01:17
Peter
MfG
Peter
AW: Access-Daten Import per VBA
07.03.2007 14:26:00
Boris
Hi Peter,
vielleicht komme ich doch auf dein Angebot zurück und schicke Dir einfach eine Excel-DB mit PLZ, Stadt und Einwohnerzahl, und dazu die Zieldatei, in die die Daten eingetragen werden sollen...
Steht das Angebot noch? :)
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Access-Daten Import per VBA


Schritt-für-Schritt-Anleitung

Um Daten aus einer Access-Datenbank in eine Excel-Tabelle zu importieren, kannst du VBA verwenden. Befolge diese Schritte:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues Modul:

    • Klicke auf Einfügen > Modul.
  3. Füge den folgenden Code ein:

    Sub AccessDatenImport()
       Dim objDB As Object
       Dim myRS As Object
       Dim SQL As String
       Dim wks As Worksheet
    
       Set wks = ThisWorkbook.Worksheets(1)
       Set objDB = CreateObject("Access.Application")
    
       ' Hier den Pfad zur Access-Datenbank angeben
       objDB.OpenCurrentDatabase "C:\Pfad\zur\DeinerDatenbank.accdb"
    
       ' Beispiel SQL-Abfrage (anpassen)
       SQL = "SELECT * FROM DeineTabelle"
       Set myRS = objDB.CurrentDb.OpenRecordset(SQL)
    
       ' Daten in die Excel-Tabelle übertragen
       Dim i As Integer
       i = 1
       Do While Not myRS.EOF
           For j = 0 To myRS.Fields.Count - 1
               wks.Cells(i, j + 1).Value = myRS.Fields(j).Value
           Next j
           myRS.MoveNext
           i = i + 1
       Loop
    
       myRS.Close
       objDB.CloseCurrentDatabase
       Set objDB = Nothing
    End Sub
  4. Passen den Code an:

    • Ändere den Pfad zur Access-Datenbank und den Tabellennamen in der SQL-Abfrage.
  5. Führe das Makro aus:

    • Drücke F5 im VBA-Editor, um das Makro auszuführen.

Häufige Fehler und Lösungen

  • Fehler 3021: Keine Daten gefunden!

    • Stelle sicher, dass deine SQL-Abfrage korrekt ist und die Tabelle Daten enthält.
  • Zugriffsfehler auf die Datenbank

    • Überprüfe, ob der Pfad zur Datenbank korrekt ist und die Datei nicht von einer anderen Anwendung verwendet wird.
  • Objektvariable nicht gesetzt

    • Achte darauf, dass die richtigen Bibliotheken für Access aktiviert sind (z.B. Microsoft Access xx.x Object Library).

Alternative Methoden

Falls du keine VBA-Lösungen verwenden möchtest, gibt es auch andere Wege, um Daten in Excel zu importieren:

  1. Power Query:

    • Du kannst Power Query verwenden, um Daten aus Access zu importieren. Wähle im Menü Daten > Abrufen und Transformieren > Aus Datenbank > Aus Microsoft Access-Datenbank.
  2. Manueller Import:

    • Öffne die Access-Datenbank und exportiere die Tabelle als CSV-Datei. Importiere die CSV-Datei dann in Excel.

Praktische Beispiele

Ein einfaches Beispiel für den Import von PLZ und Einwohnerzahlen aus einer Access-Datenbank:

Sub ImportBevoelkerung()
    Dim objDB As Object
    Dim myRS As Object
    Dim SQL As String
    Dim wks As Worksheet

    Set wks = ThisWorkbook.Worksheets("Tabelle1")
    Set objDB = CreateObject("Access.Application")

    objDB.OpenCurrentDatabase "C:\Pfad\zur\DeinerDatenbank.accdb"

    SQL = "SELECT PLZ, Einwohnerzahl FROM Einwohnerdaten"
    Set myRS = objDB.CurrentDb.OpenRecordset(SQL)

    Dim i As Integer
    i = 1
    Do While Not myRS.EOF
        wks.Cells(i, 1).Value = myRS.Fields("PLZ").Value
        wks.Cells(i, 2).Value = myRS.Fields("Einwohnerzahl").Value
        myRS.MoveNext
        i = i + 1
    Loop

    myRS.Close
    objDB.CloseCurrentDatabase
    Set objDB = Nothing
End Sub

Tipps für Profis

  • Verwendung von Parameterabfragen:

    • Um spezifische Datensätze abzurufen, nutze Parameter in deiner SQL-Abfrage, um die Leistung zu erhöhen.
  • Datenbankverbindungen optimieren:

    • Stelle sicher, dass du die Verbindung zur Datenbank schließt, wenn du mit dem Import fertig bist, um Ressourcen freizugeben.
  • Fehlerprotokollierung:

    • Implementiere eine Fehlerprotokollierung in deinem Code, um Probleme bei der Ausführung zu identifizieren und zu beheben.

FAQ: Häufige Fragen

1. Muss die Access-Datenbank geöffnet sein? Nein, die Access-Datenbank muss nicht geöffnet sein, um über VBA darauf zuzugreifen.

2. Wie importiere ich eine CSV-Datei in Access? Du kannst eine CSV-Datei in Access importieren, indem du im Access-Menü auf Externe Daten > Textdatei klickst und die CSV-Datei auswählst.

3. Was ist der Unterschied zwischen Access und Excel für Datenanalysen? Access eignet sich besser für umfangreiche Datenbanken mit mehreren Tabellen, während Excel eher für die Analyse und Visualisierung von Daten in Tabellenform verwendet wird.

4. Kann ich Daten direkt aus Excel in Access importieren? Ja, du kannst eine Excel-Tabelle in Access importieren, indem du im Access-Menü auf Externe Daten > Excel klickst und die Datei auswählst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige