Imprimir página | Cerrar ventana

Formato de hora en textbox de userform

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Word
Descripción del foro: Foro de Word
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=82975
Fecha de impresión: 15/Noviembre/2019 a las 19:53


Tema: Formato de hora en textbox de userform
Publicado por: Antonio Pedro
Asunto: Formato de hora en textbox de userform
Fecha de publicación: 29/Julio/2017 a las 23:15
Hola Buenas Noches, estoy retomando un antiguo proyecto en Word 2007 con Access, he creado un formulario para cuando abro un determinado documento de Word. Lo que pretendo y no doy con la tecla es que cuando abra el formulario me muestre 00:00 para luego yo insertar la hora.
Tengo insertado la siguiente instrucción que me funciona bien, pero no consigo que me salga al abrir el documento 00:00, que tendría que hacer, lo mismo es una tontería pero no doy con ella.
Sub AutoNew()
UserForm1.Show
End Sub
Private Sub CommandButton1_Click()
Dim LName As Range
Set LName = ActiveDocument.Bookmarks("Horario").Range
LName.Text = Me.TextBox1.Value
UserForm1.Hide
End Sub
Private Sub UserForm1_Activate()
TextBox1 = Format(TextBox1, "00:00")
End Sub

Un Saludo.




Respuestas:
Publicado por: AnSanVal
Fecha de publicación: 30/Julio/2017 a las 00:43

En vez de...

  TextBox1 = Format(TextBox1, "00:00") 

... prueba con:

  TextBox1.Value = "00:00"



-------------
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi http://achinet.mvp-access.es/" rel="nofollow - sitio_web con ejemplos Excel.


Publicado por: Antonio Pedro
Fecha de publicación: 31/Julio/2017 a las 21:16
Hola AnSanVal y gracias por contestar, he hecho el cambio que me has sugerido pero no hace lo que deseo.
Private Sub UserForm1_Load()
TextBox1.Value = "00:00"
End Sub
Lo que busco es como una especie de mascara de entrada.
Alguna sugerencia más. Un saludo.


Publicado por: AnSanVal
Fecha de publicación: 01/Agosto/2017 a las 01:17
Con «... cuando abra el formulario me muestre 00:00 para luego yo insertar la hora...», yo supuse un texto guía como recuerdo de la sintaxis. Además en el evento Activate (que mostraste en tu primer mensaje).

Si lo que pretendes es una máscara que permanezca mientras escribes (al estilo de la existente en Access), que yo sepa, Excel no dispone de dicha herramienta. (editado 2) La consulta es para Word Embarrassed. Mi ejemplo 66 supongo que funcionará también en Word, pero no he hecho la prueba.

En alguna ocasión lo he hecho con un pequeño truco, consistente en tapar el cuadro de texto con una etiqueta que muestra la máscara mientras el usuario escribe en el cuadro de texto, el texto del cuadro de texto no se ve. En algún sitio (no recuerdo donde) debo tener el ejemplo.


EDITADO:  Acabo de recordar que en junio pasado subí el ejemplo (núm. 66) a mi sito web, el enlace está abajo de este mensaje. El ejemplo está pensado para escribir la fecha pero con algunos cambios puedes adaptarlo para escribir la hora.




-------------
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi http://achinet.mvp-access.es/" rel="nofollow - sitio_web con ejemplos Excel.


Publicado por: AnSanVal
Fecha de publicación: 01/Agosto/2017 a las 13:17
¡No!, no funciona con Word, hay comandos que Word no reconoce, por ejemplo  EoMonth (fin de mes) y tampoco la manipulación de celdas (esto es obvio).

EoMonth se puede paliar fácilmente con...
ultimo = Day(DateSerial(Val(Left(TextBoxFecha, 4)), Val(Mid(TextBoxFecha, 6, 2)) + 1, 1) - 1)
... pero también hay que modificar el código para que escriba la fecha en el documento de Word.

Cuando tenga un poco de tiempo lo intentaré.




-------------
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi http://achinet.mvp-access.es/" rel="nofollow - sitio_web con ejemplos Excel.


Publicado por: AnSanVal
Fecha de publicación: 02/Agosto/2017 a las 12:29

Se podrá descargar el ejemplo http://www.achinet.mvp-access.es/excel/ayudas/mascara_de_hora.rar" rel="nofollow - Máscara de hora para Word con VBA , durante un par de semanas.

Notas: LabelHora debe cubrir a TextBoxHora. El texto de TextBoxHora no se ve pero el cursor sí.

El código no está sangrado para reducir errores al copiar/pegar.

Objetos en el formulario:  UserForm1 > (Caption: ASV - Escribir hora.) > Hight 97,5 > With 195,75

TextBoxHora,  Left 54 > Top 12 > Height 15,75 > Width 90

LabelHora,  Left 42 > Top 12 > Height 18 > Width 102

CommandButtonOK (Caption: ACEPTAR) > Left 42 > Top 12 > Height 18 > Width 102

CommandButtonCancelar (Caption: CANCELAR) > Left 42 > Top 12 > Height 18 > Width 102

 

Código VBA:

Option Explicit

Dim largo&

Const mascara$ = "hh:mm:ss"

Private Sub CommandButtonCancelar_Click()

Unload UserForm1

End Sub

Private Sub UserForm_Activate()

LabelHora.Caption = mascara

TextBoxHora.SetFocus

Me.Left = 100

End Sub 'UserForm_Activate

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If CloseMode <> vbFormCode Then Cancel = True

End Sub 'UserForm_QueryClose

Private Sub CommandButtonOK_Click()

Dim hora$, Vhora&, Vmin&, Vseg&

Vhora = Val(Left(Me.LabelHora, 2))

Vmin = Val(Mid(Me.LabelHora, 4, 2))

Vseg = Val(Mid(Me.LabelHora, 7, 2))

hora = Format((Vhora / 24) + (Vmin / 1440) + (Vseg / 86400), "hh:mm:ss")

Selection.TypeText Text:=hora

Unload UserForm1

End Sub

Private Sub LabelHora_Click()

Me.TextBoxHora.SetFocus

End Sub 'LabelHora_Click

Private Sub TextBoxHora_Change()

If largo > Len(TextBoxHora) Then

If Mid(LabelHora, largo, 1) = ":" Then

largo = largo - 2

TextBoxHora = Left(TextBoxHora, largo)

Exit Sub

End If

End If

largo = Len(TextBoxHora.Value)

Select Case largo

Case 1

If Val(TextBoxHora) > 2 Then

TextBoxHora.Value = "0" & Me.TextBoxHora.Value & ":"

largo = 3

Exit Sub

End If

largo = 1

Case 2

If Val(TextBoxHora) > 23 Then

TextBoxHora = "0" & (Val(TextBoxHora.Value) - 24) & ":"

Else

TextBoxHora = TextBoxHora.Value & ":"

End If

largo = 3

Case 4

If Val(Mid(TextBoxHora.Value, 4, 1)) > 5 Then

TextBoxHora.Value = Left(TextBoxHora.Value, 3) & "0" & Right(TextBoxHora.Value, 1) & ":"

largo = 6

GoTo Salir

End If

largo = 4

Case 5

TextBoxHora.Value = TextBoxHora.Value & ":"

largo = 6

Case 7

If Val(Mid(TextBoxHora.Value, 7, 1)) > 5 Then

TextBoxHora.Value = Left(TextBoxHora.Value, 6) & "0" & Right(TextBoxHora.Value, 1)

largo = 8

Exit Sub

End If

largo = 7

Case 8

largo = 8

Case Is > 8

TextBoxHora.Value = Left(TextBoxHora.Value, 8)

End Select

Salir:

LabelHora.Caption = TextBoxHora.Value & Mid(mascara, largo + 1)

End Sub



-------------
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi http://achinet.mvp-access.es/" rel="nofollow - sitio_web con ejemplos Excel.


Publicado por: Mihura
Fecha de publicación: 02/Agosto/2017 a las 12:40
Oño .... Ouch

Esta es de las veces que te preguntas si el perro merece semejante collar. 

Vaya currada para ver una máscara en Word.

Antonio, un saludo.


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: AnSanVal
Fecha de publicación: 02/Agosto/2017 a las 14:56
Un saludo Jesús.

Sin duda.Y seguro que «algo» he pasado por alto. Pero... claro como tú lo tienes en Access ya implementado... Cry


Editado: De todos modos, me gusta afrontar esos retos, como no necesito sacar rentabilidad... (los jubilados...Star)


-------------
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi http://achinet.mvp-access.es/" rel="nofollow - sitio_web con ejemplos Excel.


Publicado por: Antonio Pedro
Fecha de publicación: 10/Noviembre/2017 a las 22:29
En primer lugar perdón por el retraso en contestar, y en segundo muchas gracias por responder. Al final he desistido, pues no he dado con lo que deseaba. Se puede cerrar el hilo, y muchísimas gracias AnSanVal por tu tiempo.



Imprimir página | Cerrar ventana