Controleren op numerieke waarde

  • Onderwerp starter Onderwerp starter D-Mon
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

D-Mon

Gebruiker
Lid geworden
5 apr 2002
Berichten
65
Ik ben bezig met een darttoernooi in VBA, met een TEXTBOX als invoer voor de gegooide score. Nu wil ik het programma beveiligen tegen foutief ingevoerde scores. Zo heb ik liever niet dat iemand een 1 wil invullen en per ongelijk de q invoert. Als dat gebeurt loopt het programma vast en dat is precies wat er niet moet gebeuren. Is er een methode om te controleren of de ingevoerde data ook werkelijk numeriek is? Dus iets in deze zin:

If Me.TextBox1.Value = numeriek then prima!
 
Daarvoor is het validation object (Zie vba hulp)
of met een on error routine
Maar kan ook makkelijk zo:
Code:
iWaarde=val(Me.TextBox1.Value)
if iWaarde = 0  then foutmelding en terug naar af
anders verder gaan met het getal wat in iWaarde staat.
mvg leo
 
Bedankt! Het werkt prima inderdaad!

In dit geval is het onderscheid tussen text en getal gemaakt, is het ook mogelijk om te beveiligen tegen het aantal decimalen? In het geval bij darten mogen er geen decimalen gebruikt worden... Dus wederom het volgende idee:

If Me.TextBox1.Value = Meer dan 0 decimalen Then Foutmelding Else Code uitvoeren

Daarnaast wil ik proberen de muis zo min mogelijk te gebruiken bij het invoeren. Ik heb momenteel voor elke speler (2 totaal) een TextBox voor het invullen van de score, en een Commandbutton voor het verwerken van de gegooide score. Volgens mij heeft het vooral met de TAB-volgorde te maken, maar ik kom er niet helemaal uit. Ik wil graag de volgende volgorde van handelingen:

- TextBoxSpeler1 Actief maken (knipperen cursor in het vak)
- Via Toetsenbord de gegooide score invoeren
- Via Enter de cmdSpeler1 uit laten voeren
- TextBoxSpeler2 Actief maken (knipperen cursor in het vak)
- Via toetsenbord de gegooide score invoeren
- Via Enter de cmdSpeler2 uit laten voeren
- TextBoxSpeler1 Actief maken
- enz enz...

De muis wordt dus als het mogelijk is helemaal niet gebruikt.

Op het moment dat speler 1 aan het gooien is, dan worden TextBoxSpeler 2 en cmdSpeler2 invisible, op het moment dat er op cmdSpeler1 geklikt wordt dan worden TextBoxSpeler2 en cmdSpeler2 visible en worden die van speler 1 weer invisible...

Ik hoop dat jullie mij verder kunnen helpen!

Bedankt voor de voorgaande reactie, Arno
 
Wat betreft de invoer heb ik de volgende oplossing.
Alleen integers worden geaccepteerd,
Wanneer er een geheel getal wordt gegeven wordt bGeheel true
Bij bGeheel = false geef je een melding dat de invoer fout is en terug naar af.
De punt krijgt een aparte behandeling daar excel van 1.3 bv 13 maakt en dus een integer zou zijn.
Ook de invoer 0 wordt geaccepteerd (in ben niet zo goed in darten:D)
zie hier mijn voorbeeldje:
Code:
Sub test()
Dim sInvoer As String
Dim bGeheel As Boolean
 bGeheel = False
      sInvoer = InputBox("geef invoer")
        If IsNumeric(sInvoer) Then
           If CDbl(sInvoer) = CInt(sInvoer) And InStr(1, sInvoer, ".") = 0 Then
                 bGeheel = True
           End If
       End If
  MsgBox (sInvoer & " is een integer =  " & bGeheel)
End Sub
Mogelijk kan dit makkelijker, maar mij lukte dat niet.
Wat betreft de opeenvolging van de listbox kun je naar de volgende gaan.
Door deze met .setfocus op de voorgrond te zetten
Dat doe je het beste in een eventmacro bv. listbox_click
Na een enter wordt dan de code daar uitgevoerd die naar de waarde uitleest en naar de volgende tekstbox laat springen.
In feit heb je dan geen commandbuttons meer nodig.
dan wordt het:
speler 1,
score invoeren, Enter,
(score verwerken)
speler 2 enz.
Mogelijk is het mooier om de tekstboxen visible te houden
en met .enabled = true/false aan te geven welke speler aan de beurt is.
De spelers die niet aan de beurt zijn worden dan "weggegrijst"
succes met het uitwerken
mvg leo
 
Laatst bewerkt:
Je hebt het over een listbox_click. Maar ik gebruik TextBoxes, en daar bestaan het event _Click niet :-s Heb je enig idee hoe ik alsnog via een Enter en een Textbox een code kan laten uitvoeren?
 
Laatst bewerkt:
Er zijn andere events bij een Textbox. Bijvoorbeeld, Exit of Change.
 
Die had ik gevonden inderdaad, maar welke event is van toepassing bij het op Enter klikken in een Textbox?
 
Sorry,
Ik ben slordig omgegaan met text en list box
Change en exit lezen geen enter
Ik kom op deze oplossing: Ga naar de sub keydown, die ziet er voor textbox1 zo uit :
Code:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
en lees keycode uit met
Code:
if keycode = 13 then "doe je verdere code"
mvg leo
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan