Probleem in de Else

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Op deze zeer warme avond, allen hallo.

Ik heb onderstaande code gisteren al eerder geplaatst. Na testen kom ik toch een probleempje tegen in de ELSE. Het heeft er alle schijn van dat de IF in deze niet wordt gezien.

De vergelijking dient ervoor om te zorgen dat de code in de ELSE slechts gaat lopen zodra de lengte van de waarde kleiner is dan 2. Echter als ik bijvoorbeeld "12" invoer dan volgt de ELSE alsnog. Dit terwijl de lengte van de waarde toch groter is dan 1.

Waarom gebeurd dit? Waar ligt de fout en hoe los ik dit op?

De TextBoxen hebben de volgende veranderde eigenschappen:
AutoTab = True
MaxLength = 2
Value = (Leeg)
Text =(Leeg)


Code:
Private Sub ControleDatum(Optional ByVal Cancel As MSForms.ReturnBoolean)
    Dim MaxValue As Long
    
    With Me.Frame4.ActiveControl
        i = Replace(.Name, "TextBox", "")

        If i = 1 Then MaxValue = 31
        If i = 2 Then MaxValue = 12
        If i = 3 Then MaxValue = 9999
        
        If .Value <> vbNullString And .Value > MaxValue Then
            .Value = vbNullString
            Cancel = True
        Else
            If i = 1 Or i = 2 And .SelLength < 2 Or i = 3 And .SelLength < 4 Then
                .AutoTab = False
                
                MsgBox .AutoTab 'Geplaatst om te controleren of de code doorloopt.
                
                If i = 1 Or i = 2 Then .Value = Format(.Value, "00")
                If i = 3 Then .Value = Format(.Value, "0000")
                .AutoTab = True
            End If
        End If
    End With
    
End Sub
 
Laatst bewerkt:
Ik kreeg hier net een telefoontje. Het is opgelost.

.SelLength <2 is niet de juiste.

Het juiste is: Len(.Value)<2

Daarnaast had ik ook een dom beginnersfout gemaakt welke ik ook direct heb gecorrigeerd.
Ik had namelijk de vergelijking verkeerd opgesteld.
Code:
If i = 1 Or i = 2 And .SelLength < 2 Or i = 3 And .SelLength < 4 Then

Voor de volledigheid onderstaand de gecorrigeerde en werkende code.

Code:
Private Sub ControleDatum(Optional ByVal Cancel As MSForms.ReturnBoolean)
    Dim MaxValue As Long
    
    With Me.Frame4.ActiveControl
        i = Replace(.Name, "TextBox", "")

        If i = 1 Then MaxValue = 31
        If i = 2 Then MaxValue = 12
        If i = 3 Then MaxValue = 9999
        
        If .Value <> vbNullString And .Value > MaxValue Then
            .Value = vbNullString
            Cancel = True
        Else
            If i = 1 And Len(.Value) < 2 Or i = 2 And Len(.Value) < 2 Or i = 3 And Len(.Value) < 4 Then
                .AutoTab = False
                
                If i = 1 Or i = 2 Then .Value = Format(.Value, "00")
                If i = 3 Then .Value = Format(.Value, "0000")
                
                .AutoTab = True
            End If
        End If
    End With
    
End Sub

Vraag opgelost.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan