VBA Counter Problem?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du musst die Funktion aufteilen in zwei Funktionen.

Einmal eine Initialisierungsfunktion, die z.B. aufgerufen wird, wenn das Formular geöffnet wird. Da wird dann eine Zufallszahl erzeugt und der Zähler auf 0 gesetzt.

Und einmal eine Funktion, die aufgerufen wird, wenn der Benutzer auf den Button klickt. Da wird dann jedes Mal geprüft, ob die Eingabe stimmt und der Zähler hochgezählt

Option Explicit


Private Anzahl As Integer
Private PCzahl As Integer


Private Sub UserForm_Initialize()
    Anzahl = 0
    PCzahl = Int((Rnd * 100) + 1)
End Sub


Private Sub btnRaten_Click()
    Dim Userzahl As Integer
    
    If Not IsNumeric(Me.txtEingabe.Value) Then
        Me.lblAusgabe.Caption = "Du darfst nur Zahlen eingeben"
        Exit Sub
    End If
    
    Userzahl = Val(Me.txtEingabe.Value)
    Anzahl = Anzahl + 1
    
    If Userzahl > PCzahl Then
        Me.lblAusgabe.Caption = "Die Zahl " & Userzahl & " ist zu groß"
    ElseIf Userzahl < PCzahl Then
        Me.lblAusgabe.Caption = "Die Zahl " & Userzahl & " ist zu klein"
    Else
        Me.lblAusgabe.Caption = "Richtig. Du hast " & Anzahl & " Versuche gebraucht."
        UserForm_Initialize
    End If
End Sub

Du hast eine Endlosschleife, weil in jeden Schleifendurchlauf sich weder Userzahl, noch PCzahl ändert.

Woher ich das weiß:Berufserfahrung – Programmierer

Ein paar Zeilen habe ich nicht verstanden, weil ich die Befehle nicht kenne:

Userzahl = Val(tbxEingabe.Value)

Das habe ich ersetzt durch

Userzahl = InputBox("Zahl eingaben")

Was macht diese Zeile? Die bisherige Anzahl an Versuchen wird gespeichert in einer Variablen lblCounter. Mit lblCounter wird aber nichts mehr gemacht. Und was .Caption bedeutet verstehe ich nicht.

lblCounter.Caption = anzahl

Verstehen würde ich noch anzahl = lblCounter.Caption aber nicht Caption auf der linken Seite.

Denkbar wäre

lblCounter = anzahl

wobei ja eigentlich "anzahl" der counter ist, da

anzahl = anzahl +1

___________

Zu deinem Problem: Du bist in einer Endlosschleife, da Userzahl sich nicht verändert. Es wird immer vergleichen PCzahl mit Userzahl, aber Userzahl ändert sich nie.

Lucamaestro 
Fragesteller
 30.09.2021, 20:46

Userzahl tbxEingabe ist eine Textbox in dem der User eine Zahl eingibt. Wenn man auf den Button Raten klickt, dann soll eine if verzweigung prüfen, ob die eingebebene Zahl größer, kleiner oder gleich groß ist. bei jedem klicken soll die anzahl +1 sein. der lblCounter.caption ist ein label, der den Wert von anzahl zurückgibt.

0
Elumania  30.09.2021, 20:49
@Lucamaestro

aber anzahl wird doch lblCounter zugewiesen, nicht umgekehrt.

Ich kenne z.B. noch

zahl = Cells(1,1).Value

Hier wird die Zelle angesprochen und dort speziell der Wert extrahiert und zahl zugewiesen. Bei dir ist es aber umgekehrt in der Reihenfolge. Das habe ich so noch nie gesehen:

lblCounter.Caption = anzahl
0
Lucamaestro 
Fragesteller
 30.09.2021, 20:51
@Elumania

Nunja. Ich habe zuerst versucht, den Wert in eine Zelle zu speichern und wenn man nochmal auf den Button Raten klickt, dass man diesen Wert so aufrufen könnte. Aber leider hat das auch nicht funktioniert.

0
Elumania  30.09.2021, 20:53
@Lucamaestro

Wert in eine Zelle schreiben:

wert = 75
Cells(1,1) = wert
'Abrufen aus der Zelle
wert = Cells(1,1)

aber das kennst du wahrscheinlich

0
Lucamaestro 
Fragesteller
 30.09.2021, 20:54
@Elumania

Ok. Aber wie schaffe ich es, dass wenn man auf den Button klickt der Wert anzahl um 1 erhöht wird ohne das ein Laufzeitfehler passiert.

0
Elumania  30.09.2021, 20:58
@Lucamaestro

Ist dein Button eine Userform? oder wie darf man sich deinen Button vorstellen?

0
Lucamaestro 
Fragesteller
 30.09.2021, 21:00
@Elumania

In der Userform gibt es einen Label für die Textausgabe, eine Textbox, ein Label für die Anzahl der Runde (Anzahl) und der Button Raten

0

Die Frage wäre, wieso nutzt du überhaupt die Schleife?

Die macht so keinen Sinn. Anzahl wird einfach hochgezählt bis zur Grenze von Integer, dann findet der Überlauf statt. Der Datentyp verträgt keine höheren Werte.

Eine Textbox nennt man nach ungarischer Notation txtEingabe und nicht tbxEingabe.

Lucamaestro 
Fragesteller
 30.09.2021, 20:57

ok

0
safur  30.09.2021, 20:58
@Lucamaestro

Sag mal in Worten was getan werden soll.

Ich glaube nämlich mit jedem Klick soll sich die Zufallszahl verändern.

0