Gemakkelijk datum invullen

Status
Niet open voor verdere reacties.

hellboy01

Gebruiker
Lid geworden
18 jun 2006
Berichten
333
Hi,
weet iemand misschien hoe je makkelijk een datum in een vast formaat in een textbox zet.
Iets van "12-9-2017" maar dan" __-__-____" of iets in die trend en dat de user dus alleen maar de cijfers hoeft in te vullen. Volgens mij had je in VB2010 een datumveld maar ik kan dat in VBA niet vinden.
Vroeger had je een calender maar die zit er volgens mij niet meer in .
alvast bedankt rob
 
Ik gebruik deze om te zorgen dat de invoer wordt gedaan zoals ik het wil, maar ik begrijp dat je iets anders bedoelt hoor :)

Code:
Private Sub B2_afterupdate()
Dim InvoerCheck As Boolean
InvoerCheck = True

 With CreateObject("vbscript.regexp")
    .IgnoreCase = True
    .Pattern = "^[0-9]{2}-[0-9]{2}-[0-9]{4}$"
       InvoerCheck = .test(B2)
  
 End With
    If InvoerCheck = False Then
        MsgBox "Verkeerde invoer" & vbCrLf & vbCrLf & _
        "Vul de datum zo in :  22-12-2017 "
        B2.Value = ""
End If
End Sub

Zo worden de streepjes automatisch geplaatst: (nadelig is dat verwijderen met backspace om zeep wordt geholpen)

Code:
Private Sub TextBox1_Change()
If Len(TextBox1.Value) = 2 Then TextBox1.Value = TextBox1.Value & "-"
If Len(TextBox1.Value) = 5 Then TextBox1.Value = TextBox1.Value & "-"
End Sub

Deze zorgt ervoor dat je met dubbelklikken overnieuw kunt beginnen met invullen.

Code:
Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1.Value = ""
End Sub

En als je naast de change nog een Keypress event gebruikt, kan men niets meer intikken nadat de gehele datum is ingevuld.

Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Len(TextBox1.Value) = 10 Then KeyAscii = 0
End Sub
 
Laatst bewerkt:
Ik moet dit wel even bestuderen maar komt wel een heel eind in de buurt van wat ik wil denk ik.
Bedankt SjonR
 
Die keypress kan je ook weglaten door bij de eigenschappen van je Textbox "Maxlenght" op 10 in te stellen. Scheelt weer code achter je Userform.
 
Of:
Code:
Private Sub TextBox1_Change()
T = "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"
    With TextBox1
      l = Len(.Text)
        If l > 0 And l < 10 And Not .Text Like Left(T, l * 5) Then .Text = Left(.Text, l - 1)
     If l > 7 And l < 10 Then .Text = Format(.Text, "##-##-####")
 End With
End Sub
 
Hi Harry,
ziet er interessant uit. Kun je mij aub uitleggen wat T = "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" doet? Want dat is nieuw voor mij.
Alvast bedankt, rob.
 
Dat is een controle in 'like' functie of je een getal invoert.

Zo kan het ook
Code:
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode > 64 And KeyCode < 91 Or Shift = 1 Then
 TextBox1.Text = Replace(LCase(TextBox1.Text), LCase(Chr(KeyCode)), "")
ElseIf Len(TextBox1.Text) = 8 Then TextBox1.Text = Format(TextBox1.Text, "##-##-####")
   End If
End Sub

Of:
Code:
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 If KeyCode > 64 And KeyCode < 91 or shift = 1 Then TextBox1 = Replace(LCase(TextBox1.Text), LCase(Chr(KeyCode)), "")
 If Len(TextBox1.Text) = 8 Then TextBox1.Text = Format(TextBox1.Text, "##-##-####")
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan