mit diesem Makro ziehe ich eine gesamte Access Datenbank in eine Exceltabelle. Hier kann ich _ die Tabelle mit Excel-Boardmitteln komfortabel sortieren und filtern.
Const pfad As String = "H:\access test" 'Access DB PFad
Const myAccessDB As String = "RRC_WIP.accdb" 'Access DB Dateiname
Const myDB As String = "RepairMiddle" 'DB-Tabellenname im Access
Const myTable As String = "Tabelle1" 'in dieser Tabelle stehen die Daten für Access
Sub Get_Access_Repairlist()
' Übernahme einer kompletten Access-Tabelle
Dim con As ADODB.Connection
Dim datei As String
Dim fld As ADODB.Field
Dim rs As ADODB.Recordset
Dim spalte As Long
Dim ws As Worksheet
Set ws = Sheets(myTable)
' (1) Verbindung zur Datenbank herstellen
datei = pfad & "\" & myAccessDB
Set con = New ADODB.Connection
con.Open ConnectionString:= _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & datei
' (2) Recordset erstellen
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseServer
rs.Open Source:=myDB, _
ActiveConnection:=con, _
CursorType:=adOpenKeyset, _
LockType:=adLockReadOnly, _
Options:=adCmdTableDirect
' (3b) Spaltenüberschriften schreiben
spalte = 1
For Each fld In rs.Fields
ws.Cells(1, spalte) = fld.Name
spalte = spalte + 1
Next fld
' (3c) Sätze des Recordsets auflisten
ws.Range("A" & 2).CopyFromRecordset _
Data:=rs, _
MaxRows:=ws.Rows.Count - 1, _
MaxColumns:=ws.Columns.Count
' (4) Recordset und Verbindung schließen
rs.Close
con.Close
Set rs = Nothing
Set con = Nothing
End Sub
Jetzt habe ich eine Datenbank mit vielen tausend oder meinetwegen auch vielen million Einträgen, auf jedem Fall eine Menge die Excel überfordert. Kann ich die Access Datenbank auch gefiltert nach Excel holen? In Pseudocode stelle ich mir das so vor, um alle Artikel aus Holz zu kopieren:
for each item in Datenbank
if item.rs!Material = "Holz then item.AddTo Recordset
next item
ws.Range("A" & 2).CopyFromRecordset
Gibts da eine Möglichkeit? Vielleicht einen SQL Befehl?
Lg,
Klaus