ich habe in Access mehrere Abfragen, die ich mittels Makro (oder gibt es auch andere Möglichkeiten?) von Excel aus starten und dann auch in Excel importieren will.
Kann mir jemand, den dafür nötigen Code schicken?
mfg
Christian
Sub ADOImportFromAccessTable(DBFullName As String, _
TableName As String, TargetRange As Range)
' Example: ADOImportFromAccessTable "C:\FolderName\DataBaseName.mdb", _
"TableName", Range("C1")
Dim cn As ADODB.Connection, rs As ADODB.Recordset, intColIndex As Integer
Set TargetRange = TargetRange.Cells(1, 1)
' open the database
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _
DBFullName & ";"
Set rs = New ADODB.Recordset
With rs
' open the recordset
.Open TableName, cn, adOpenStatic, adLockOptimistic, adCmdTable
' all records
'.Open "SELECT * FROM " & TableName & _
" WHERE [FieldName] = 'MyCriteria'", cn, , , adCmdText
' filter records
RS2WS rs, TargetRange ' write data from the recordset to the worksheet
' ' optional approach for Excel 2000 or later (RS2WS is not necessary)
' For intColIndex = 0 To rs.Fields.Count - 1 ' the field names
' TargetRange.Offset(0, intColIndex).Value = rs.Fields(intColIndex).Name
' Next
' TargetRange.Offset(1, 0).CopyFromRecordset rs ' the recordset data
End With
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
Um eine Access-Abfrage über ein Excel-Makro auszuführen und die Ergebnisse zu importieren, folge diesen Schritten:
Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
Füge ein neues Modul hinzu:
Kopiere den folgenden Code in das Modul:
Sub ADOImportFromAccessTable(DBFullName As String, _
TableName As String, TargetRange As Range)
Dim cn As ADODB.Connection, rs As ADODB.Recordset
Set TargetRange = TargetRange.Cells(1, 1)
' Datenbankverbindung öffnen
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & DBFullName & ";"
Set rs = New ADODB.Recordset
rs.Open TableName, cn, adOpenStatic, adLockOptimistic, adCmdTable
TargetRange.CopyFromRecordset rs ' Daten importieren
rs.Close
cn.Close
End Sub
Ändere die Parameter:
DBFullName auf den Pfad deiner Access-Datenbank (z.B. C:\Weekly_Report.mdb).TableName auf den Namen deiner Abfrage oder Tabelle.TargetRange auf den Zellbereich in Excel, wo die Daten erscheinen sollen (z.B. Range("C1")).Führe das Makro aus:
ALT + F8, wähle das Makro und klicke auf "Ausführen".Fehler beim Kompilieren: Stelle sicher, dass alle verwendeten Variablen korrekt deklariert sind und dass Du die richtige Datenbankverbindung verwendest.
Verbindung zur Datenbank schlägt fehl: Überprüfe den Pfad zur Datenbank und stelle sicher, dass die Datei existiert. Prüfe auch, ob die Access-Datenbank nicht von einem anderen Programm geöffnet ist.
Daten werden nicht importiert: Vergewissere Dich, dass der TargetRange korrekt angegeben ist und dass die Excel-Tabelle die richtige Struktur hat, um die importierten Daten zu empfangen.
Neben der Verwendung von VBA kannst Du auch Access Makros direkt innerhalb von Access erstellen, um die Abfragen auszuführen und die Ergebnisse in eine Excel-Datei zu exportieren. Hierbei kannst Du die Exportfunktion in Access nutzen, um die Daten automatisch in eine Excel-Datei zu speichern.
Hier ist ein Beispiel, wie Du die Funktion ADOImportFromAccessTable aufrufen kannst:
Sub BeispielAufruf()
ADOImportFromAccessTable "C:\Weekly_Report.mdb", "AbfrageName", Range("C1")
End Sub
In diesem Beispiel wird die Abfrage "AbfrageName" aus der Datenbank "Weekly_Report.mdb" in die Excel-Tabelle ab Zelle C1 importiert.
Verwende Error-Handling: Um Fehler zu vermeiden, füge eine Fehlerbehandlung in Deinen Code ein, damit Du besser nachvollziehen kannst, was schiefgeht.
Setze auf Parameterabfragen: Wenn Du nur bestimmte Datensätze importieren möchtest, kannst Du Parameter in Deine SQL-Abfragen einfügen, um die Flexibilität zu erhöhen.
Automatisiere den Prozess: Überlege, ob Du das Makro automatisiert zu bestimmten Zeiten oder Ereignissen ausführen kannst, um den Importprozess zu optimieren.
1. Muss ich spezielle Add-Ins für Excel verwenden?
Nein, die Verwendung von ADO für den Import von Access-Daten erfordert keine zusätzlichen Add-Ins, solange Du die richtige VBA-Bibliothek referenzierst.
2. Funktioniert dies in allen Excel-Versionen?
Der oben gezeigte Code sollte in Excel 2000 und späteren Versionen funktionieren, achte jedoch darauf, dass die ADO-Referenzen korrekt gesetzt sind.
3. Kann ich auch Access-Formulare importieren?
Ja, Du kannst auch Daten aus Access-Formularen exportieren, indem Du die entsprechenden SQL-Statements anpasst.