28.11.2012

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

Formeln auf einer UserForm in einer TextBox darstellen...

Formeln auf einer UserForm in einer TextBox anzeigen. Z. B. "Formula", "FormulaLocal"... und wie muss die Formel in VBA ...