Implementación de 3 macros diferentes en varias celdas de una hoja por selección

Implementación de 3 macros diferentes en varias celdas de una hoja por selección

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 selectiones más complejo.generalmenteNo es el mejor método.

Respuesta2

En lugar de usarlo Selectionen todo el código, le sugiero que lo use Selectionpara 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.

información relacionada