Parar reloj en excel

Me pasaron un rutina para poner un reloj en excel pero cuando inicio el archivo se ejecuta solo y me gustaria ver si se puede poner un bonton para inicar el reloj y parar el reloj... A continuacion le paso la rutina
Sub HORA()
Range("A1").Formula = "=NOW()"
Application.OnTime Now + TimeValue("00:00:01"), "HORA"
End Sub
Sub auto_Open()
Call HORA
End Sub
Me gustaria poder iniciar el reloj y pararlo a boluntad mediante dos botones

1 Respuesta

Respuesta
1
Es posible ello. Veamos:
En el archivo de excel. Abrir el Editor de VB.
Creamos un modulo que tendra los siguientes eventos
En la hoja de calculo existe 2 botones de comando y una casilla de verificacion que esta permite cambiar de un reloj de aguja a otro que es analogico.
1. StartClock()
2. StopClock
3. cbClockType_Click()
4. Updateclock()
Ahora las siguientes sentencias estan localizadas en "General"
Por favor no te olvides de Finalizar y puntuar la respuesta. Gracias.
Christian
Option Explicit
Dim NextTick
Sub StartClock()
UpdateClock
End Sub
Sub StopClock()
' Cancels the OnTime event (stops the clock)
On Error Resume Next
Application.OnTime NextTick, "UpdateClock", , False
End Sub
Sub cbClockType_Click()
' Hides or unhids the clock
With ThisWorkbook.Sheets("Clock")
If .DrawingObjects("cbClockType").Value = xlOn Then
.ChartObjects("ClockChart").Visible = True
Else
.ChartObjects("ClockChart").Visible = False
End If
End With
End Sub
Sub UpdateClock()
' Updates the clock that's visible
Dim Clock As Chart
Set Clock = ThisWorkbook.Sheets("Clock").ChartObjects("ClockChart").Chart
If Clock.Parent.Visible Then
' ANALOG CLOCK
Const PI As Double = 3.14159265358979
Dim CurrentSeries As Series
Dim s As Series
Dim x(1 To 2) As Variant
Dim v(1 To 2) As Variant
' Hour hand
Set CurrentSeries = Clock.SeriesCollection("HourHand")
x(1) = 0
x(2) = 0.5 * Sin((Hour(Time) + (Minute(Time) / 60)) * (2 * PI / 12))
v(1) = 0
v(2) = 0.5 * Cos((Hour(Time) + (Minute(Time) / 60)) * (2 * PI / 12))
CurrentSeries.XValues = x
CurrentSeries.Values = v
' Minute hand
Set CurrentSeries = Clock.SeriesCollection("MinuteHand")
x(1) = 0
x(2) = 0.8 * Sin((Minute(Time) + (Second(Time) / 60)) * (2 * PI / 60))
v(1) = 0
v(2) = 0.8 * Cos((Minute(Time) + (Second(Time) / 60)) * (2 * PI / 60))
CurrentSeries.XValues = x
CurrentSeries.Values = v
' Second hand
Set CurrentSeries = Clock.SeriesCollection("SecondHand")
x(1) = 0
x(2) = 0.85 * Sin(Second(Time) * (2 * PI / 60))
v(1) = 0
v(2) = 0.85 * Cos(Second(Time) * (2 * PI / 60))
CurrentSeries.XValues = x
CurrentSeries.Values = v
Else
' DIGITAL CLOCK
ThisWorkbook.Sheets("Clock").Range("DigitalClock").Value = CDbl(Time)
End If
' Set up the next event one second from now
NextTick = Now + TimeValue("00:00:01")
Application.OnTime NextTick, "UpdateClock"
End Sub

Ahora estas sentencias se deberan escribir en Workbook ubicada en Microsoft Excel Objetos. Es necesario esto para llamar a las sentencias a ejecutarse.
Private Sub Workbook_Open()
Call StartClock
End Sub
La sentencia indicada arriba es en Open()

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call StopClock
End Sub

La sentencia indicada esta en BerforeClose()

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas