
Soy un completo novato tanto en Excel como en Vba y estoy tratando de crear un código que pueda proporcionarme un temporizador y un cambio de color de celda que se produce cuando hago clic en mis tres botones StartBtn, StopBtn y ResetBtn. En este momento tengo el código para que funcione para una sola celda B3, pero necesito que los botones funcionen para cualquier celda de la hoja en la que se hace clic. Estoy pegando el código a continuación y espero que tengan la amabilidad de revisar el código y salvar a este novato confundido.
Código:
Dim StopTimer As Boolean
Dim SchdTime As Date
Dim Etime As Date
Const OneSec As Date = 1 / 86400#
Private Sub StartBtn_Click()
Range("B3").Interior.ColorIndex = 6
StopTimer = False
SchdTime = Now()
[B3].Value = Format(Etime, "hh:mm:ss")
Application.OnTime SchdTime + OneSec, "Sheet1.NextTick"
End Sub
Private Sub ResetBtn_Click()
Range("B3").Interior.ColorIndex = -4142
StopTimer = True
Etime = 0
[B3].Value = "00:00:00"
End Sub
Private Sub StopBtn_Click()
Range("B3").Interior.ColorIndex = 4
StopTimer = True
Beep
End Sub
Sub NextTick()
If StopTimer Then
'Don't reschedule update
Else
[B3].Value = Format(Etime, "hh:mm:ss")
SchdTime = SchdTime + OneSec
Application.OnTime SchdTime, "Sheet1.NextTick"
Etime = Etime + OneSec
End If
End Sub
Respuesta1
En excel puedes usar elselecciónpropiedad para abordar lo que está seleccionado o activo en su hoja de trabajo.
Tenga en cuenta, sin embargo, que esto puede causar problemas más adelante a medida que el código se vuelve más complejo y su uso selection
es más complejo.generalmenteNo es el mejor método.
Respuesta2
En lugar de usarlo Selection
en todo el código, le sugiero que lo use Selection
para identificar la celda actualmente seleccionada cuando invoque su StartBtn
, guarde esa ubicación y la use en las otras rutinas; p.ej,
Dim StopTimer como booleano Dim SchdTime como fecha Dim Etime como fecha Atenuar SavedLoc como variante ' Aquí Const OneSec como fecha = 1/86400# Sub StartBtn_Click privado() Si Selection.Count <> 1 Entonces MsgBox "Seleccione una sola celda". Salir Sub Terminara si SavedLoc = Selección.Dirección ' Aquí Rango (Loc guardada).Interior.ColorIndex = 6 ' Aquí Temporizador de parada = Falso SchdTime = Ahora() Rango (Loc guardada).Valor = Formato(Etime, "hh:mm:ss") ' Aquí Aplicación.OnTime SchdTime + OneSec, "NextTick" Subtítulo final Subrestablecimiento privadoBtn_Click() Rango (Loc guardada).Interior.ColorIndex = -4142 ' Aquí Temporizador de parada = Verdadero Etiempo = 0 Rango (Loc guardada).Valor = "00:00:00" ' Aquí SavedLoc = nulo ' Aquí Subtítulo final Sub StopBtn_Click privado() Rango (Loc guardada).Interior.ColorIndex = 4 ' Aquí Temporizador de parada = Verdadero SavedLoc = nulo ' Aquí Bip Subtítulo final Sub SiguienteTick() Si StopTimer Entonces 'No reprogramar la actualización Demás Rango (Loc guardada).Valor = Formato(Etime, "hh:mm:ss") ' Aquí SchdTime = SchdTime + UnSeg Aplicación.OnTime SchdTime, "NextTick" Etime = Etime + UnSeg Terminara si Subtítulo final
Si desea ejecutar temporizadores en varias celdas simultáneamente, entonces se vuelve mucho más complicado y debe consultar los comentarios sobretu otra pregunta.