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
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