Saltar al contenido

Formato obligatorio de tiempo HH:MM al escribir en textbox

publicado

Buen día y con el gusto de saludarle nuevamente expertos recurro a ustedes para solicitar su valiosa colaboración en el mejor de los sentidos ya que tengo un textbox al que le quiero poner un formato de hora HH:MM para que al momento de escribir obligue al usuario final a poner ese formato de tiempo exactamente, he intentado hacerlo pero en mi programación veo muchos errores, por ejemplo cuando le doy con las teclas direccionales para seleccionar y me posiciono en el espacio 3 y le doy una letra este la acepta; bueno de antemano el textbox no debe aceptar letras, unicamente números y en el espacio 3 el signo de dos puntos (:) pero como lo digo al hacer eso lamentablemente ya no respeta y quiero que se exactamente  HH:MM y ningún otro carácter mas que los que ya comente, espero haberme explicado, anexo archivo muestra y quedo atento a sus indicaciones y comentarios constructivos. de antemano mil gracias.

Libro1.xlsm

Featured Replies

publicado

Hola no entiendo muy bien la idea final pero podrías probar esto más sencillo

 

Valor = UserForm1.TextBox1.Value

If VBA.IsDate(Valor) Then                                            ' esto directamente comprueba si lo que se ha metido es una fecha
UserForm1.TextBox1.Value = Replace(Valor, ".", ":")   ' Te cambia el . por : ya que 22.45 también lo acepta como fecha
MsgBox "es Fecha"
Else: MsgBox "no valido"
End If

Adaptalo como creas

Espero que te sirva

 

  • 2 months later...
publicado
  • Autor

no me funciona :(

publicado

Seguro que hay otras formas, esta es una de ellas.

Si no me he equivocado esta macro te permite registrar la hora entre las 00:00 y las 23:59.

Private Sub TextBox1_Change()
TextBox1 = Left(TextBox1, TextBox1.SelStart)
Select Case Len(TextBox1)
   Case 1:
      If InStr("012", TextBox1) = 0 Then
         TextBox1 = ""
         Exit Sub
      End If
   Case 2:
      Select Case Left(TextBox1, 1)
         Case 0, 1
            If InStr("0123456789", Right(TextBox1, 1)) = 0 Then
               TextBox1 = Left(TextBox1, 1)
               Exit Sub
            End If
          Case 2
            If InStr("0123", Right(TextBox1, 1)) = 0 Then
               TextBox1 = Left(TextBox1, 1)
               Exit Sub
            End If
      End Select
      TextBox1 = TextBox1 & ":"
      Exit Sub
   Case 3:
      If Right(TextBox1, 1) <> ":" Then
         TextBox1 = Left(TextBox1, 2)
      End If
   Case 4:
      If InStr("012345", Right(TextBox1, 1)) = 0 Then
         TextBox1 = Left(TextBox1, 3)
         Exit Sub
      End If
   Case 5:
      If InStr("0123456789", Right(TextBox1, 1)) = 0 Then
         TextBox1 = Left(TextBox1, 4)
         Exit Sub
      End If
End Select
End Sub

 

publicado
  • Autor

con eso esta mas que perfecto maestro mil gracias, algún día espero tener la capacidad que tienen para resolver estos problemas "excelianos!:D vaya que me ha funcionado!

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.