Para quem navega no blog e no fórum há algum tempo, já deve ter usado essa dica:
Ela funciona bem. Só tem um problema, que é quando você começa limpar o campo usando a tecla backspace, ele trava quando encontra um separador de datas ( “/”), obrigando o usuário a selecionar todo o texto para conseguir alterá-lo. Depois de precisar de código e bater um pouco a cabeça, cheguei num resultado satisfatório:
Private KeyCodeToAvoid As MSForms.ReturnInteger Private Sub TextBoxData_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Set KeyCodeToAvoid = KeyCode End Sub Private Sub TextBoxData_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'Limita a Qde de caracteres TextBoxData.MaxLength = 10 'para permitir que apenas números sejam digitados If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then KeyAscii = 0 End If End Sub Private Sub TextBoxData_Change() 'Formata : dd/mm/aaaa 'não avalia se for backspace ou delete If Not (KeyCodeToAvoid = KeyCodeConstants.vbKeyBack Or KeyCodeToAvoid = KeyCodeConstants.vbKeyDelete) Then If Len(TextBoxData) = 2 Or Len(TextBoxData) = 5 Then TextBoxData.Text = TextBoxData.Text & "/" SendKeys "{End}", True End If End If 'zera o keycode KeyCodeToAvoid = KeyCodeConstants.vbKey0 End Sub |
É isso. Bom proveito!