Archief - [PROG][VBA] For..Next fout

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Karre

Legacy Member
We waren bezig met de invoercontrole tijdens de les programmeren en de leerkracht typte 4D4 in als controle of het werkte en blijkbaar ziet hij dit als numeriek. Gevolg, wij moesten zelf een programma schrijven waarin hij controleert welke combinaties hij nog als numeriek rekent (combinatie is: getal - letter - getal). Nu heb ik dit gedaan en bij 3 karakters zou het dus gaan over de e en de d op de tweede plaats dat hij dan die combinatie als numeriek ziet. Ook al weet ik het antwoord dankzij mijn programma, toch klopt er iets niet aan en ik vind het echt niet. Ik heb wat commentaar erbij geschreven die jullie wat meer informatie geven:

Code:
Sub ControleNumeriek()

Dim intGetal1 As Integer
Dim intGetal2 As Integer
Dim strLetter As String
Dim strCombinatie As String
Dim intAscii As Integer
Dim intTeller As Integer
Dim intteller2 As Integer
Dim intteller3 As Integer

intGetal1 = 0

For intTeller = 1 To 9
    'Dit stuk is de reset, als ik dit niet had gedaan zou hij bij de ASCII tot 255 geraken en njah, als je weet wat ASCII is zul je dan ook weten dat hij dan gaat vastlaan omdat er niets na komt in de Europese tekenset.
    intGetal2 = 0
    intAscii = 96
    intGetal1 = intGetal1 + 1
    For intteller2 = 1 To 26
        intAscii = intAscii + 1
        strLetter = Chr(intAscii)
        For intteller3 = 1 To 9
            intGetal2 = intGetal2 + 1
            'Hier voeg ik alles samen (als string zodat hij ze gewoon naast elkaar zet).
            strCombinatie = CStr(intGetal1) + strLetter + CStr(intGetal2)
            If IsNumeric(strCombinatie) = True Then
                Debug.Print strCombinatie
            End If
        Next
    Next
Next

End Sub

Nogthans zou ik toch nooit verder mogen gaan dan 9 bij het laatste getal maar blijkbaar krijg ik de volgende combinaties:

Code:
1d28
1d29
1d30
1d31
1d32
1d33
1d34
1d35
1d36
1e37

Dit is wel maar een klein stuk van wat ik als resultaat krijg, maar normaal zou ik nooit meer als dit mogen krijgen: 1-9 A-Z 1-9 toch?

Red2048

Legacy Member
Je zet "intGetal2 = 0" op de verkeerde plaats, het staat in hoofdletters aangegeven:
Code:
Sub ControleNumeriek()

Dim intGetal1 As Integer
Dim intGetal2 As Integer
Dim strLetter As String
Dim strCombinatie As String
Dim intAscii As Integer
Dim intTeller As Integer
Dim intteller2 As Integer
Dim intteller3 As Integer

  intGetal1 = 0

For intTeller = 1 To 9
    'Dit stuk is de reset, als ik dit niet had gedaan zou hij bij de ASCII tot 255 geraken en njah, als je weet wat ASCII is zul je dan ook weten dat hij dan gaat vastlaan omdat er niets na komt in de Europese tekenset.
' VERPLAATS DIT:
    'intGetal2 = 0
    intAscii = 96
    intGetal1 = intGetal1 + 1
    For intteller2 = 1 To 26
        intAscii = intAscii + 1
        strLetter = Chr(intAscii)
' NAAR HIER:
        intGetal2 = 0
        For intteller3 = 1 To 9
            intGetal2 = intGetal2 + 1
            'Hier voeg ik alles samen (als string zodat hij ze gewoon naast elkaar zet).
            strCombinatie = CStr(intGetal1) + strLetter + CStr(intGetal2)
            If IsNumeric(strCombinatie) = True Then
                Debug.Print strCombinatie
            End If
        Next
    Next
Next

End Sub
En sorry als ik het zeg, maar je code is ook heel slordig waardoor je zo'n problemen sneller zal voor hebben. Probeer het zo simplistisch mogelijk te houden.
Code:
Sub ControleNumeriek()

    Dim intGetal1 As Integer
    Dim intGetal2 As Integer
    Dim intAscii As Integer
    Dim strCombinatie As String
    
    For intGetal1 = 1 To 9      ' voor 1-9
    For intAscii = 97 To 122    ' voor a-z
    For intGetal2 = 1 To 9      ' voor 1-9

        strCombinatie = CStr(intGetal1) + Chr(intAscii) + CStr(intGetal2)
        If IsNumeric(strCombinatie) Then Debug.Print strCombinatie
                
    Next intGetal2
    Next intAscii
    Next intGetal1

End Sub

Karre

Legacy Member
Die simpele versie is inderdaad wel veel simpeler. En dat was wel een domme fout van me, dat ik dat niet eerder had gezien zeg.

Bij die simpelere versie doe je iets waar ik eigenlijk nooit aan heb gedacht, ik heb gewoon altijd in mijn oefeningen op de for next het zitten doen zoals men in de boek doet en dat is met een extra variabele (intTeller dus). Ik zou beter eens beginnen verder nadenken over dingen in de boek dus :). Ik wist niet eens dat het mocht om van neem nu 97 te beginnen tellen :sad:.

Red2048

Legacy Member
Careless zei:
..., dat ik dat niet eerder had gezien zeg.
hehe, kan gebeuren. ^^

Careless zei:
..., Ik wist niet eens dat het mocht om van neem nu 97 te beginnen tellen.
Yup, dat hadden ze u eigenlijk wel moeten zeggen, mja, hier nog een extra weetje dan ivm For/Next ;):

aftellen:
Code:
    Dim i As Integer
    For i = 5 To 1 Step -1
        Debug.Print i       ' 5, 4, 3, 2, 1
    Next i

optellen per stap:
Code:
    Dim i As Integer
    For i = 0 To 8 Step 2
        Debug.Print i       ' 0, 2, 4, 6, 8
    Next i

Karre

Legacy Member
Kan er soms iemand die bug eens uitleggen eigenlijk? Ik vraag me dat eigenlijk wel af. Bij E zou ik dat nog eventueel kunnen begrijpen dat hij dat als numeriek beschouwt maar bij D zie ik dat toch wel niet.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan