Excel VBA Code: Do-While-Schleife zum Zählen

sgw703

Well-known member
ID: 234371
L
14 Juni 2006
1.153
46
Hallo, habe ein Problem, arbeite Wochenlang an einem Programm, was W-LAN Pings auswertet, habe da schon ne menge fertig und geht soweit, nun soll jedoch die Benutzerfreundlichkeit gefördert werden, da hagt es.

Habe erst mit einem Range und FormularLocal einen =ZÄHLENWENN Befehl eingetragen, dass war aber zu unflexible.

Nun die kleine Schleife, die ausgerechnet nicht geht:
' Hier entsteht eine Schleife:
Dim i As Long
Dim e As Long
Dim s As Integer
Dim z As Long
Dim v As Integer
Dim g As Long
' Festlegung der größen und bereiche

With ActiveSheet
i = 0 'Erfolgreiche Pings
e = 0 'Errors
s = 0 'Errorfolgenzähler
z = 1 'Zeile
v = 0 'Vollständige Errorfolgen
g = 0 'Gesamtinformationen
' Werte zuordnen, zu beginn alle auf 0, nur Zeile ist 1

Set Bereich = Range("C1:C65535") 'Es wird im Gesamten Bereich "C" gesucht

Do While Cells(z, 1).Value <> "" 'Die Schleife läuft, bis ein leeres Feld getroffen wird

If Cells(z, 1).Value = "E" Then 'Wenn ein "E:" in der Zelle auftaucht, wird eine Aktion aufgerufen
e = e + 1 'Es werden die Errors um einen hoch gezählt
g = g + 1 'Es werden die Gesamtinfos um einen hoch gezählt
s = s + 1 'Es werden die Serien um einen hoch gezählt

If s = 50 Then 'Wenn die Serie von 50 Errors in Folge erreicht wird, wird eine Aktion ausgeführt
v = v + 1 'Es werden die Vollendeten Error Serien um einen hoch gezählt
s = 0 'Die Serienzählung wird wieder auf "0" zurück gesetzt

Else 'Sollte oben der Fall nicht eintreffen
End If 'Die If anweisung der Serie wird beendet

Else 'Sollte oben der Fall nicht zutreffen

If Cells(z, 1).Value = "I" Then 'Wenn in der Zelle ein "I:" steht, wird eine aktion ausgeführt
i = i + 1 'Es werden die Informationen um einen hoch gezählt
g = g + 1 'Es werden die Gesamtinfos um einen hoch gezählt
s = 0 'Die Errorserienzählung wird auf "0" zurück gesetzt, da die Serie unterbrochen wurde

Else 'Sollte oben der Fall nicht eintreffen
End If 'Die If anweisung der Serie wird beendet

z = z + 1 'Zählt eine Zeile weiter runter
End If 'Die gesamte If anweisung wird beendet

Loop ' Ende der Schleife

' Ab hier kommen die Ziele, wo er die Variablen Speichern soll
' Range("F1").Select 'Feld "F1" wird ausgewählt
' F1 = e 'Trägt in "F1" die Errors ein

Range("F1") = e

' Range("F2").Select 'Feld "F2" wird ausgewählt
' F2 = v 'Trägt in "F2" die Errorserien ein

Range("F2") = v

' Range("F3").Select 'Feld "F3" wird ausgewählt
' F3 = i 'Trägt in "F3" die Informationen (Ping zu) ein

Range("F3") = i

' Range("F4").Select 'Feld "F4" wird ausgewählt
' F4 = g 'Trägt in "F4" die Gesamt Informationen ein

Range("F4") = g

' Range("F5").Select 'Feld "F5" wird ausgewählt
' F5 = e / g * 100 'Rechnet den Prozentsatz an Fehlinformationen aus und schreibt diesen in "F5"

' Range("F5") = e / g * 100

End With

' Agenda: i = "I:"; e = "E:"; s = 50 "E:" in Serie; v = Vollendete Serie; g = Gesamterbereich; z = Zeile
' Die Schleife zählt in Spalte C alle "E:", "I:", "E: in 50er folgen" und die "Gesamtinformationen".
Habe im Debugger geschaut, warum er mir nur 0 Werte ausgibt, er überspringt die "Then" Befehle. weis aber grade auch nicht, wie ich das verhindern kann.

Zur Erklärung, er soll die (E)rror oder Ping-(I)nformationen Zählen.
Zusätzlich einen Gesamtwert und ob es 50 Errors in Folge sind (dann sind die Fahrzeuge und Krane abgeschaltet).
Der Wert: "E:" und "I:" stehen in Zeile C des Aktiven Sheets.
Die Prozentrechnung, wie hoch unsere Fehlerquote liegt, funktioniert überhaupt nicht, daher ausdokumentiert. :ugly:

Die Benutzeroberfläche wird drübergelegt, wenn das Monsterprogramm endlich mal läuft, wird langsam zu groß und kompliziert.


Danke schonmal.
 
hmm wird z auch immer schön erhöht?
der z+=1 steht nämlich noch mit in einer If mit drin wenn ich mich nicht täuche.
Ziemlich unübersichtlicher Code - Warum eigentlich VBA?
 
jop, z wird erhöht udn das funktioniert auch, aber die erhöhung der anderen Werte nicht.

Das hat beim einzelschritt Debuggen gezeigt, dass da das Problem liegt.

Der ist unübersichtlich, da er die Schleifen Tabs raus genommen hat beim Kopieren und natürlich auch die Grünfärbung der Dokumentation, zum verfolgend es Gedankenganges.

Am besten mal bei Excel im Modul reinkopieren,d ann sieht man schonmal die ganzen Dokus grün, dann gehts schon.

VBA aus dem Grund, da es relativ leicht ist bei dem Projekt da noch die Übersicht zu behalten und um sich leicht einzuarbeiten, daher haben wir usn darauf geeinigt.
 
Hab den Fehler gefunden, der war hier drin:
Do While Cells(z, 1).Value <> ""

If Cells(z, 1).Value = "E" Then
e = e + 1
g = g + 1
s = s + 1

Cells(z, 1) war der Fehler, ich gebe ganz oben an, er soll C1 bis C65535 durchsuchen und schreibe für die Zelle, er soll in Spalte 1 (A), immer auf z gehen,d ass + eins gesetzt wird und schauen ob da die E oder I Informationen drin sind.

Bin grade erst auf der Arbeit drauf gestoßen. :ugly:

Wenn man Stundenlang über 2 Wochen nur daran sitzt, schreibt man aber auch einen schrott in die Programme. :roll:

Achso und ich musste z = z + 1 nach oben verschieben, dadruch fängt er halt in reihe 2 direkt an, da wenn ich z auf 0 setze er mekert und wenn ich es bei 1 lasse, er erst erhöht und dann durchläuft, aber das Problem damit gelöst, indem ich die Tabellen alle ab Spalte A2 einfüge.;)

Trotzdem nochmal danke für den Hilfsversuch.