Bij TextBox.Value "0", de berekening niet laten uitvoeren

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Goedenavond beste allen,

Ik heb even een simpel iets waar de oplossing feitelijk voor de hand ligt, maar welke ik al een paar dagen niet zie.

Code:
Private Sub ControleTijd(Optional ByVal Cancel As MSForms.ReturnBoolean)
    Dim MaxValue As Long
    
    With Me.Frame5.ActiveControl
        i = Replace(.Name, "TextBox", "")
        
        If i >= 4 And i <= 11 Then[COLOR="#0000FF"]
            If .Value = vbNullString Then .Value = 0[/COLOR]
     
            If i = 4 Or i = 6 Or i = 8 Or i = 10 Then MaxValue = 24
            If i = 5 Or i = 7 Or i = 9 Or i = 11 Then MaxValue = 59
            
            If .Value > MaxValue Then
                .Value = vbNullString
                Cancel = True
                Exit Sub
            Else

[B]'Dient te werken ook als waarde "0" is.[/B]

                If .SelLength < 2 Then
                    .AutoTab = False
                    .Value = Format(.Value, "00")
                    .AutoTab = True
                End If
            End If

[B]'Mag enkel werken zodra er een geldige waarde is ingevoerd, maar mag weer niet werken als waarde "00" is.[/B]

            TextBox12.Value = Format(TimeSerial(TextBox6.Value, TextBox7.Value, 0) _
                                            - TimeSerial(TextBox4.Value, TextBox5.Value, 0), "hh:mm")
            TextBox13.Value = Format(TimeSerial(TextBox8.Value, TextBox9.Value, 0) + TimeSerial(TextBox10.Value, TextBox11.Value, 0) _
                                            - TimeValue(TextBox12.Value), "hh:mm")
        End If
    End With
    
End Sub

De code werkt, maar ik wil graag de opmerkingen in de code werkend hebben.

Wie kan mij even op weg helpen?

Alvast bedankt!
 
Laatst bewerkt:
Hmmm ik heb er een beetje een rommeltje van gemaakt, zie ik.

De werking.

In de textboxen staan voor ingesteld de waarde "00". Zodra het textbox leeg is en er wordt enter of tab gegeven dan moet de waarde "00" er weer in komen te staan bij Exit.
Daar "0"een lengte heeft van < 2, dient de AutoTab even te worden uitgeschakeld om een extra Tab te voorkomen. Immers de Max Lengte staat ingesteld op 2 en de AutoTab staat ingesteld op True.

De berekening onderaan de code voor TextBox 12 en 13, hoeft in deze niet uitgevoerd te worden.

Dit alles daar ik van mening ben dat de code onnodig loopt en er onnodig snelheid en geheugen verloren gaat.
 
Zucht. Ik word zo moe van mijzelf en het achteraf voor Jan met de korte achternaam plaatsen van een vraag, omdat ik namelijk ineens dan het licht zie.

:eek:

Code:
Private Sub ControleTijd(Optional ByVal Cancel As MSForms.ReturnBoolean)
    Dim MaxValue As Long
    
    With Me.Frame5.ActiveControl
        i = Replace(.Name, "TextBox", "")
        
        If i >= 4 And i <= 11 Then
            If .Value <> vbNullString Then
                If i = 4 Or i = 6 Or i = 8 Or i = 10 Then MaxValue = 24
                If i = 5 Or i = 7 Or i = 9 Or i = 11 Then MaxValue = 59
            Else
                .Value = 0
            End If
            
            If .Value > MaxValue Then
                .Value = vbNullString
                Cancel = True
            Else
                If .SelLength < 2 Then
                    .AutoTab = False
                    .Value = Format(.Value, "00")
                    .AutoTab = True
                End If
                
                If .Value > 0 Then
                    TextBox12.Value = Format(TimeSerial(TextBox6.Value, TextBox7.Value, 0) - TimeSerial(TextBox4.Value, TextBox5.Value, 0), "hh:mm")
                    TextBox13.Value = Format(TimeSerial(TextBox8.Value, TextBox9.Value, 0) + TimeSerial(TextBox10.Value, TextBox11.Value, 0) - TimeValue(TextBox12.Value), "hh:mm")
                End If
            End If
        End If
    End With
    
End Sub


Mocht het simpeler kunnen, dan houd ik mij leerzaam aanbevolen.
 
Laatst bewerkt:
Mijn vrouw wie van oorsprong psycholoog is, heeft de oorzaak genoemd van waarom men ineens het antwoord ziet zodra de prangende vraag is gepost.

Je laat op dat moment namelijk de vraag los en dus ben je niet meer over geconcentreerd bezig met de vraag.

Het leven is zo simpel............. :cool:
 
Ondanks opgelost. Toch nog wel even een kleine vraag m.b.t. de werking op het laatste gedeelte (het Else gedeelte" van de code.

Ik heb mij wel eens wijs laten maken dat je beter de Format van een waarde op het laatst kunt doorvoeren. Wat is dan beter?

Bovenstaande zo laten of toch beide vergelijkingen in het ELSE gedeelte omdraaien?

Mijn inzien maakt het geen dan wel weinig verschil en werken beide net zo goed.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan