Microsoft Excel

Herbers Excel/VBA-Archiv

VBA|UserForm For-Each-Schleife zählt nicht korrekt

Betrifft: VBA|UserForm For-Each-Schleife zählt nicht korrekt von: Mario
Geschrieben am: 10.07.2013 01:38:15

Hallo zusammen,

bei folgendem Code zählt meine For-Each Schleife fehlerhaft.
Solange die Tabelle entsprechenden Suchwert beinhaltet, wird auch der richtige Wert angegeben.
Selbst bei einem Eintrag wird auch nur 1 angezeigt.
Wenn die Tabelle aber keinen Eintrag mit diesem Suchwert hat, gibt der Counter immer 1 statt 0 aus.

' Anzahl Firmenrückmeldungen wird in txtFirmenrückmeldungCounter ausgegeben
lngAnzahlReihen = 0
ThisWorkbook.Worksheets("Kundenliste").Activate
ActiveSheet.UsedRange.AutoFilter
ActiveSheet.UsedRange.AutoFilter _
   6, "=warte auf Firma"
   lngEnde = ActiveSheet.Cells.Find("*", searchdirection:=xlPrevious).Row
For Each lngReihe In ActiveSheet.Range("A2:A" & lngEnde).SpecialCells(xlCellTypeVisible).Rows
   lngAnzahlReihen = lngAnzahlReihen + 1
Next
txtFirmenrueckmeldungCounter = lngAnzahlReihen

Ich hänge zur Sicherheit nochmal die Datei an. Der Code befindet sich in ufHome.

Vielen Dank für die Hilfe.

Viele Grüße
Mario

https://www.herber.de/bbs/user/86283.xlsm

  

Betrifft: AW: VBA|UserForm For-Each-Schleife zählt nicht korrekt von: Mustafa
Geschrieben am: 10.07.2013 02:40:14

Hallo Mario,

in dieser Zeile wird für lngEnde der Wert 1 ermittelt:

   lngEnde = ActiveSheet.Cells.Find("*", searchdirection:=xlPrevious).Row
Was dann dazu führt das dein Bereich A1:A2 wird in dem du nach sichtbaren Zeilen suchst.
Und da die Zeile 1 nun mal sichtbar ist, gibt dir der Zähler auch eine 1 aus.

Rückmeldung obs hilft wäre nett.
Gruß aus der Domstadt Köln.


  

Betrifft: AW: VBA|UserForm For-Each-Schleife zählt nicht korrekt von: Mario
Geschrieben am: 10.07.2013 11:51:12

Hallo Mustafa,

vielen Dank.

Ich habe es jetzt wie folgt gelösst, auch wenn es mir nicht so recht gefallen will:

ThisWorkbook.Worksheets("Kundenliste").Activate
ActiveSheet.UsedRange.AutoFilter
ActiveSheet.UsedRange.AutoFilter _
6, "=warte auf Firma"
lngEnde = ActiveSheet.Cells.Find("*", searchdirection:=xlPrevious).Row
lngAnzahlReihen = 0
If CLng(lngEnde) = 1 Then
    lngAnzahlReihen = 0
Else
    For Each lngReihe In ActiveSheet.Range("A2:A" & lngEnde).SpecialCells(xlCellTypeVisible). _
Rows
        lngAnzahlReihen = lngAnzahlReihen + 1
    Next
End If
txtFirmenrueckmeldungCounter = lngAnzahlReihen

Gibt es da vielleicht auch eine etwas komfortablere Lösung?


  

Betrifft: AW: VBA|UserForm For-Each-Schleife zählt nicht korrekt von: Jürgen V.
Geschrieben am: 10.07.2013 21:31:13

Hallo Mario,

würdest Du das Ergebnis nicht einfach mit einem ZählenWenn() im Arbeitsblatt erreichen? Ebenso, wenn Du das Ergebnis innerhalb eines Makros benötigst:

Application.WorksheetFunction.CountIf(ThisWorkbook.Worksheets("Kundenliste").UsedRange.Columns(6), "warte auf Firma")
Gruß, Jürgen


  

Betrifft: AW: VBA|UserForm For-Each-Schleife zählt nicht korrekt von: Mustafa
Geschrieben am: 10.07.2013 23:21:16

Hallo Mario,

Jürgens Idee ist da wohl die einfachere Lösung da du sie dann auf alle deine Anfragen umsetzen kannst und so den AutoFilter nicht benötigst, was die Performance des Codes wohl auch erheblich beeinflusst.

In etwa so wäre die Umsetzung :

' Anzahl Firmenrückmeldungen wird in txtFirmenrückmeldungCounter ausgegeben
txtFirmenrueckmeldungCounter = Application.WorksheetFunction.CountIf(ThisWorkbook.Worksheets(" _
Kundenliste").UsedRange.Columns(6), "warte auf Firma")

' Anzahl Kundenrückmeldungen
txtKDRuemeldungCounter = Application.WorksheetFunction.CountIf(ThisWorkbook.Worksheets(" _
Kundenliste").UsedRange.Columns(6), "warte auf Kunden")

' Anzahl Kulanzanfragen
txtKulanzCounter = Application.WorksheetFunction.CountIf(ThisWorkbook.Worksheets("Kundenliste"). _
UsedRange.Columns(6), "Kulanzanfrage")

' Anzahl in Bearbeitung
txtInBearbeitungCounter = Application.WorksheetFunction.CountIf(ThisWorkbook.Worksheets(" _
Kundenliste").UsedRange.Columns(6), "in Bearbeitung")

Und der Code wird auch erheblich kürzer durch diese Vorgehensweise.

Rückmeldung obs Hilft wäre nett.
Gruß aus der Domstadt Köln.


  

Betrifft: AW: VBA|UserForm For-Each-Schleife zählt nicht korrekt von: Mario
Geschrieben am: 11.07.2013 01:21:35

Hallo Ihr zwei.

@ Jürgen: Sehr guter Tipp. Das bringt deutlich mehr Lesbarkeit und wahrscheinlich auch Performance.

@ Mustafa: Danke Dir, das ich nur noch Copy Paste machen musste. ;) Das hat wunderbar geklappt.


  

Betrifft: Danke für die Rückmeldung orT von: Mustafa
Geschrieben am: 11.07.2013 02:37:25

Gruß aus der Domstadt Köln.


 

Beiträge aus den Excel-Beispielen zum Thema "VBA|UserForm For-Each-Schleife zählt nicht korrekt"