DAO - Accessdatenbank Anzahl aus allen Auswahlabfragen ausgeben...

Frage: In meinen Accessdatenbanken (.mdb und .accdb) habe ich einige Abfragen. Die Anzahl der Datensätze aller Auswahlabfragen möchte ich aus Excel herraus wissen. Wie geht das?

Hier noch eine Beispieldatei: DAO Accessdatenbank Anzahl aus allen Auswahlabfragen ausgeben...

Hinweis: Um diesen Code zu testen und das gleiche Ergebnis wie in der Beispieldatei zu erhalten werden die Beispieldatenbanken "nwind.mdb" und "nwind.accdb" von Microsoft benötigt!

Option Explicit
'----------------------------------------------------------------------------- 
' Module    : Modul1 
' Procedure : Main 
' Author    : Case (Ralf Stolzenburg) 
' Date      : 28.11.2012 
' Purpose   : DAO Accessdatenbank Anzahl aus allen Auswahlabfragen ausgeben... 
'----------------------------------------------------------------------------- 
' Erstellt UND getestet in Excel 2010 - Access ist NICHT installiert 
' http://msdn.microsoft.com/de-de/library/office/ff965871%28v=office.14%29.aspx 
Sub Main()
    ' Dimensionieren der Variablen 
    Dim objQueryDef As Object
    Dim objDBank As Object
    Dim objRSet As Object
    Dim lngRow As Long
    ' Wenn ein Fehler auftritt gehe zu der angegebenen Sprungmarke 
    On Error GoTo Fin
    ' Hier öffne ich die Beispieldatenbank "Nwind.accdb" von Microsoft 
    ' Muss also noch aus dem Netz gezogen werden sofern nicht vorhanden 
    Set objDBank = CreateObject("DAO.DBEngine.120").OpenDatabase _
        ("C:\Temp\Nwind.accdb") ' Pfad- und Dateiname anpassen 
    ' http://msdn.microsoft.com/de-de/library/cc438676%28v=vs.71%29.aspx 
    ' Durchlaufe alle Abfragen 
    For Each objQueryDef In objDBank.QueryDefs
        ' Wenn die Abfrage NICHT mit einem "~" beginnt dann... 
        If Not Left(objQueryDef.Name, 1) = "~" Then
            ' Wenn die Abfrage eine Auswahlabfrage ist dann... 
            If objQueryDef.Type = 0 Then ' 240 = dbQAction, 0 = dbQSelect 
                ' Wenn die Abfrage keine Parameter erwartet dann... 
                If Not objQueryDef.Parameters.Count > 0 Then
                    ' Fülle die Objektvariable "objRSet" mit dem RecordSet 
                    Set objRSet = objDBank.QueryDefs _
                        (objQueryDef.Name).OpenRecordset()
                    With objRSet
                        .MoveLast
                        .MoveFirst
                    End With
                    ' Der Code bezieht sich auf ein bestimmtes Objekt 
                    ' Hier Tabelle1 = der CodeName der Tabelle 
                    ' Alles was sich auf dieses "With" bezieht 
                    ' MUSS mit einem Punkt beginnen 
                    With Tabelle1
                        ' Trage den Namen der Abfrage ein 
                        .Cells(lngRow + 1, 1).Value = objQueryDef.Name
                        ' Trage die Anzahl der Datensätze ein 
                        .Cells(lngRow + 1, 2).Value = objRSet.RecordCount
                    End With
                    lngRow = lngRow + 1
                    ' Setze die Objektvariable auf Nothing 
                    Set objRSet = Nothing
                End If
            End If
        End If
    Next objQueryDef
Fin:
    ' Schliesse die Datenbank 
    objDBank.Close
    ' Setze die Objektvariablen auf Nothing 
    Set objRSet = Nothing
    Set objDBank = Nothing
    ' Wenn ein Fehler auftritt gib ihn aus mit Fehlernummer und Beschreibung 
    If Err.Number <> 0 Then MsgBox "Error: " & _
        Err.Number & " " & Err.Description
End Sub
'----------------------------------------------------------------------------- 
' Module    : Modul1 
' Procedure : Main_1 
' Author    : Case (Ralf Stolzenburg) 
' Date      : 28.11.2012 
' Purpose   : DAO Accessdatenbank Anzahl aus allen Auswahlabfragen ausgeben... 
'----------------------------------------------------------------------------- 
' Erstellt UND getestet in Excel 2010 - Access ist NICHT installiert 
' http://msdn.microsoft.com/de-de/library/office/ff965871%28v=office.14%29.aspx 
Sub Main_1()
    ' Dimensionieren der Variablen 
    Dim objQueryDef As Object
    Dim objDBank As Object
    Dim objRSet As Object
    Dim lngRow As Long
    ' Wenn ein Fehler auftritt gehe zu der angegebenen Sprungmarke 
    On Error GoTo Fin
    ' Hier öffne ich die Beispieldatenbank "Nwind.mdb" von Microsoft 
    ' Muss also noch aus dem Netz gezogen werden sofern nicht vorhanden 
    Set objDBank = CreateObject("DAO.DBEngine.36").OpenDatabase _
        ("C:\Temp\Nwind.mdb") ' Pfad- und Dateiname anpassen 
    ' http://msdn.microsoft.com/de-de/library/cc438676%28v=vs.71%29.aspx 
    ' Durchlaufe alle Abfragen 
    For Each objQueryDef In objDBank.QueryDefs
        ' Wenn die Abfrage NICHT mit einem "~" beginnt dann... 
        If Not Left(objQueryDef.Name, 1) = "~" Then
            ' Wenn die Abfrage eine Auswahlabfrage ist dann... 
            If objQueryDef.Type = 0 Then ' 240 = dbQAction, 0 = dbQSelect 
                ' Wenn die Abfrage keine Parameter erwartet dann... 
                If Not objQueryDef.Parameters.Count > 0 Then
                    ' Fülle die Objektvariable "objRSet" mit dem RecordSet 
                    Set objRSet = objDBank.QueryDefs _
                        (objQueryDef.Name).OpenRecordset()
                    With objRSet
                        .MoveLast
                        .MoveFirst
                    End With
                    ' Der Code bezieht sich auf ein bestimmtes Objekt 
                    ' Hier Tabelle1 = der CodeName der Tabelle 
                    ' Alles was sich auf dieses "With" bezieht 
                    ' MUSS mit einem Punkt beginnen 
                    With Tabelle1
                        ' Trage den Namen der Abfrage ein 
                        .Cells(lngRow + 1, 1).Value = objQueryDef.Name
                        ' Trage die Anzahl der Datensätze ein 
                        .Cells(lngRow + 1, 2).Value = objRSet.RecordCount
                    End With
                    lngRow = lngRow + 1
                    ' Setze die Objektvariable auf Nothing 
                    Set objRSet = Nothing
                End If
            End If
        End If
    Next objQueryDef
Fin:
    ' Schliesse die Datenbank 
    If Not objDBank Is Nothing Then objDBank.Close
    ' Setze die Objektvariablen auf Nothing 
    Set objRSet = Nothing
    Set objDBank = Nothing
    ' Wenn ein Fehler auftritt gib ihn aus mit Fehlernummer und Beschreibung 
    If Err.Number <> 0 Then MsgBox "Error: " & _
        Err.Number & " " & Err.Description
End Sub

Beliebte Posts aus diesem Blog

Formeln - auch Array - per VBA eintragen...

Alle Dateien eines Ordners - Optional mit Unterordner

Excel -> Word in Textmarken (Bookmarks)...