Utilizar "Application.OnTime " en un Formulario

Hoy tengo una duda, estoy haciendo un formulario de de bienvenida en el cual quiero poner una imagen que se vaya desplazando hacia la derecha. Como en vba no hay un timer encontré esta rutina..
Public datHora As Date
Public Const conIntervalo = 2 'un minuto
Public Const conRunMacro = "Tu_Sub" 'tu proced.
Sub StartTemporizador()
datHora = Now + TimeSerial(0, 0, conIntervalo)
'iniciar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=True
End Sub
Sub Tu_Sub()
MsgBox ("HOLA") 'o cualquier instrucción
'reiniciar el temporizador
StartTemporizador
End Sub
Sub StopTemporizador()
On Error Resume Next
'desactivar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=False
End Sub
Public datHora As Date
Public Const conIntervalo = 2 'un minuto
Public Const conRunMacro = "Tu_Sub" 'tu proced.
Sub StartTemporizador()
datHora = Now + TimeSerial(0, 0, conIntervalo)
'iniciar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=True
End Sub
Sub Tu_Sub()
MsgBox ("HOLA") 'o cualquier instrucción
'reiniciar el temporizador
StartTemporizador
End Sub
Sub StopTemporizador()
On Error Resume Next
'desactivar el temporizador
Application.OnTime _
Earliesttime:=datHora, _
Procedure:=conRunMacro, _
Schedule:=False
End Sub
En la cual cada 2 seg aparece un msgbox, pero no puedo adaptarla para que controle la imagen del formulario y haga:
img1.left = 10

1 Respuesta

Respuesta
2
A esto llamo yo 'complicarse la vida'... es mucho más sencillo el tema:
En el Userform, colocá esta instrucción dentro del evento Initialize:
Private Sub UserForm_Initialize()
Application.OnTime Now + TimeValue("00:00:02"), "moviendo"
End Sub

Y en evento de cierre, o cuando te parezca que deba pararse, esta otra:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.OnTime Now + TimeValue("00:00:02"), "moviendo", Schedule:=False
End Sub

En algún módulo necesitas guardar la rutina 'moviendo'. Ajustá el nombre de tu control y de tu UF.
Lo único que resta es comparar que si left llegó a cierto nro en lugar de sumar, reste. Y lo mismo si llegó a 6 x ej, ya empiece a sumar.
Sub moviendo()
UserForm1.Image1.Left = UserForm1.Image1.Left + 20
Application.OnTime Now + TimeValue("00:00:02"), "moviendo"
End Sub

PD) En mi manual 400Macros encontrarás un cap dedicado al método On Time (este mes todos al 50%)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas