puedes abreviar un poco el código que te señala cpmario, supongo que todavía serás capaz de entenderlo:
Private Sub Timer1_Timer()
Static blnShowLabel As Boolean
blnShowLabel = not blnShowLabel
Label1.Visible = blnShowLabel
DoEvents
End Sub
Recuerda que aquí timer1 es un control no la instrucción Timer
Para hacer algo parecido con la instrucción Timer el código sería:
private Periodo as integer ' un valor menor de 86401 (segundos de 1 día)
' al cruzar la medianoche, mientras se ejecuta esta función la llamada fallará, si no se controla... es un ejercicio para el interesado controlar dicha situación
private sub AlterarModo
Static blnShowLabel As Boolean
dim crono as long
crono= Timer
do
doevents
loop while (timer - crono) < periodo
blnShowLabel = not blnShowLabel
Label1.Visible = blnShowLabel
end sub
' Este código es equivalente al anterior pero que desactiva el timer tras su ejecución
Private Sub Timer1_Timer()
Static blnShowLabel As Boolean
blnShowLabel = not blnShowLabel
Label1.Visible = blnShowLabel
timer1.enabled=false ' esto hace que sea idéntico a la rutina anterior
End Sub
' la llamada de uno u otro método son equivalentes, aunque el resultado es distinto, ya que el timer es asíncrono.
public sub Micodigo
'algún código
' ..............
call AlterarModo
timer1.enabled= true ' aquí se activa el timer, pero se contínua 'al timepo' con la siguiente línea
' más código
' .......................
end sub
' si necesitáramos que el timer se comportara de forma síncrona como sucede con la función tendríamos que ponerle una trampa.
public sub Micodigo
'algún código
' ..............
call AlterarModo
timer1.enabled= true
do ' aquí el se espera hasta que el timer se apague antes de continuar con la siguiente línea, por tanto se comporta igual que la llamada a 'AlterarModo'
doevents
loop while timer1.enabled = true
' más código
' .......................
end sub
Sin embargo para hacer 'parpadear' un control conviene que sea un control timer, precisamente porque es asíncrono y la ejecución continúa...
Por último recordarte que el timer se utiliza con milisegundos y su valor máximo es aproximadamente 1 minuto por lo que habrás de utilizar un multiplicador de frecuencia para valores mayores... la función timer trabaja con segundos y su valor expresa los segundos que han pasado desde la medianoche por eso después de 86399 pasa a 0. si un período a controlar es 400 y se invoca después del segundo 86001 no fncionará ya que nunca se dará la condición (timer - puntoDeInicio) > periodo