Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA SQL Abfrage Datensätze zählen

Forumthread: VBA SQL Abfrage Datensätze zählen

VBA SQL Abfrage Datensätze zählen
14.04.2015 09:47:53
Frank
Guten Morgen zusammenm
mit folgender Routine mache ich eine Abfrage im Datenblatt DATA. Die dem Suchkriterium entsprechenden Datensätze werden im Anschluß ins Blatt INPUT kopiert.
Ich würde gern die Anzahl der gefilterten Datensätze in eine Variable transportieren. Wie muss ich meinen Quelltext erweitern? Habe was von COUNT gelesen, weiß aber nicht, wie bzw. wo ich es einsetzen muss.
Sub sql()
Dim cn As Object, rs As Object
Dim strConnection As String, strSQL As String
Set cn = CreateObject("ADODB.CONNECTION")
strConnection = "DRIVER={Microsoft Excel Driver (*.xls)}; DBQ=" & ThisWorkbook.FullName
With cn
.Open strConnection
strSQL = "SELECT * " & _
"FROM  [DATA$C19:AE2000] " & _
"WHERE [PRODUCT] IN " & prodstring & ""
Set rs = CreateObject("ADODB.RECORDSET")
With rs
.Source = strSQL
.ActiveConnection = strConnection
.Open
'tbl_Gesamt.Range("A1:F1").Copy Destination:=tbl_SQL.Range("A1")
Sheets("INPUT").Range("C20").CopyFromRecordset rs
'tbl_SQL.Columns.AutoFit
MsgBox rs.Fields.Count
.Close
End With
End With
cn.Close
Set cn = Nothing
Set rs = Nothing
End Sub
Vielen Dank,
Frank

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA SQL Abfrage Datensätze zählen
14.04.2015 10:26:21
Luschi
Hallo Frank,
so klappt das bei mir:

Sub sql()
Dim cn As Object, rs As Object
Dim strConnection As String, strSQL As String
strConnection = "DRIVER={Microsoft Excel Driver (*.xls)}; DBQ=" & ThisWorkbook.FullName
With cn
.Open strConnection
strSQL = "SELECT * " & _
"FROM  [DATA$C19:AE2000] " & _
"WHERE [PRODUCT] IN " & prodstring & ";"
Set rs = CreateObject("ADODB.RECORDSET")
With rs
.Source = strSQL
.ActiveConnection = strConnection
'wichtig, damit man den Cursor innerhalb des
'Recordsets positionieren kann  (.MoveLast / .MoveFirst)
.CursorType = 3 'adOpenStatic
.Open
If Not (rs.BOF Or rs.BOF) Then
'es existieren Datensätze
'wichtig, um die genaue Zahl der DS zu ermitteln
.MoveLast
MsgBox oAdoRS.RecordCount
.MoveFirst
tbl_Gesamt.Range("A1:F1").Copy Destination:=tbl_SQL.Range("A1")
Sheets("INPUT").Range("C20").CopyFromRecordset rs
'tbl_SQL.Columns.AutoFit
Else
MsgBox "Keine Datensätze vorhanden!", 16 + vbSystemModal, "Hinweis..."
End If
.Close
End With
End With
cn.Close
Set cn = Nothing
Set rs = Nothing
End Sub
Gruß von Luschi
aus klein-Paris

Anzeige
AW: VBA SQL Abfrage Datensätze zählen
14.04.2015 10:33:02
Frank
Hallo Luschi,
vielen Dank schonmal. Als was muß ich denn oAdoRS deklarieren?
VG,
Frank

AW: VBA SQL Abfrage Datensätze zählen
14.04.2015 10:42:13
Luschi
Hallo Frank,
nein, kleiner Übertragungsfehler aus meinem Objekt:
statt: MsgBox oAdoRS.RecordCount
so:    MsgBox rs.RecordCount
Gruß von Luschi
aus klein-Paris

Anzeige
Herzlichen Dank, das funktioniert prima! [n/t]
14.04.2015 10:54:41
Frank
Herzlichen Dank, das funktioniert prima!
;
Anzeige
Anzeige

Infobox / Tutorial

VBA SQL Abfrage: Datensätze zählen in Excel


Schritt-für-Schritt-Anleitung

  1. Erstelle ein neues VBA-Modul in Excel:

    • Drücke ALT + F11 um den VBA-Editor zu öffnen.
    • Klicke mit der rechten Maustaste auf "VBAProject (deinWorkbookName)" und wähle Einfügen > Modul.
  2. Füge den folgenden Code ein:

    Sub sql()
       Dim cn As Object, rs As Object
       Dim strConnection As String, strSQL As String
       Set cn = CreateObject("ADODB.CONNECTION")
       strConnection = "DRIVER={Microsoft Excel Driver (*.xls)}; DBQ=" & ThisWorkbook.FullName
    
       With cn
           .Open strConnection
           strSQL = "SELECT * FROM [DATA$C19:AE2000] WHERE [PRODUCT] IN " & prodstring & ";"
           Set rs = CreateObject("ADODB.RECORDSET")
           With rs
               .Source = strSQL
               .ActiveConnection = strConnection
               .CursorType = 3 ' adOpenStatic
               .Open
    
               If Not (.BOF Or .EOF) Then
                   .MoveLast
                   MsgBox "Anzahl der Datensätze: " & .RecordCount
                   .MoveFirst
                   ' Kopiere die Daten ins INPUT-Blatt
                   Sheets("INPUT").Range("C20").CopyFromRecordset rs
               Else
                   MsgBox "Keine Datensätze vorhanden!", vbExclamation
               End If
               .Close
           End With
       End With
       cn.Close
       Set cn = Nothing
       Set rs = Nothing
    End Sub
  3. Führe das Makro aus:

    • Schließe den VBA-Editor und gehe zurück zu Excel.
    • Drücke ALT + F8, wähle sql und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Problem: "Keine Datensätze vorhanden!" wird angezeigt.

    • Lösung: Überprüfe, ob das Suchkriterium im prodstring korrekt definiert ist und ob es Datensätze im Datenblatt gibt.
  • Problem: Laufzeitfehler 3704: "Operation ist nicht erlaubt, wenn die Verbindung geschlossen ist."

    • Lösung: Stelle sicher, dass der Datenbanktreiber korrekt installiert ist und die Verbindung zu Excel funktioniert.

Alternative Methoden

Du kannst auch die COUNT-Funktion in SQL verwenden, um die Anzahl der Datensätze direkt zu ermitteln. Ändere die SQL-Abfrage wie folgt:

strSQL = "SELECT COUNT(*) FROM [DATA$C19:AE2000] WHERE [PRODUCT] IN " & prodstring & ";"

Verwende dann rs.Fields(0).Value, um die Anzahl der Datensätze anzuzeigen.


Praktische Beispiele

  • Zählen von Datensätzen in Access: Wenn Du mit Access arbeitest, kannst Du die access vba anzahl datensätze-Technik verwenden, um die Anzahl der Datensätze in einer bestimmten Tabelle zu zählen.

  • Zählen von Zeilen in MySQL: In MySQL könntest Du eine ähnliche Abfrage nutzen:

    SELECT COUNT(*) FROM table_name WHERE condition;

Tipps für Profis

  • Nutze Debug.Print anstelle von MsgBox, um die Anzahl der Datensätze in der Entwicklungsumgebung anzuzeigen, ohne die Ausführung zu unterbrechen.

  • Achte darauf, den CursorType und LockType entsprechend deiner Anforderungen festzulegen, um die Performance zu optimieren.

  • Wenn Du regelmäßig Abfragen ausführst, speichere Deine SQL-Abfragen in Variablen, um den Code sauber und wartbar zu halten.


FAQ: Häufige Fragen

1. Wie kann ich die Anzahl der Datensätze in einer Access-Datenbank zählen?
Verwende die access sql count-Funktion in einer Abfrage wie oben beschrieben.

2. Welche Excel-Version benötige ich für diese VBA-Routinen?
Die Beispiele sind für Excel 2010 und höher geeignet, wobei ADO (ActiveX Data Objects) unterstützt wird.

3. Kann ich diese Technik auch in anderen Datenbanken verwenden?
Ja, die SQL-Syntax ist in den meisten relationalen Datenbanken ähnlich, solange die Datenbanktreiber korrekt installiert sind.

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