Я абсолютный новичок как в Excel, так и в VBA, и пытаюсь придумать код, который может дать мне таймер и изменение цвета ячейки, которое происходит, когда я нажимаю на мои три кнопки StartBtn, StopBtn и ResetBtn. Прямо сейчас я получил код для работы с одной ячейкой B3, но мне нужны кнопки, чтобы работать с любой ячейкой на листе, на который щелкают. Я вставляю приведенный ниже код и надеюсь, что вы, ребята, будете любезны просмотреть код и сохранить этот запутанный noob.

Код:

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

2 ответа2

0

Вместо того чтобы использовать Selection во всем вашем коде, я предлагаю вам использовать Selection чтобы идентифицировать текущую выбранную ячейку при вызове StartBtn , сохранить это местоположение и использовать его в других подпрограммах; например,

Dim StopTimer           As Boolean
Dim SchdTime            As Date
Dim Etime               As Date
Dim SavedLoc            As Variant                                 ' Here
Const OneSec            As Date = 1 / 86400#

Private Sub StartBtn_Click()
    If Selection.Count <> 1 Then
        MsgBox "Please select a single cell."
        Exit Sub
    End If
    SavedLoc = Selection.Address                                   ' Here
    Range(SavedLoc).Interior.ColorIndex = 6                        ' Here
    StopTimer = False
    SchdTime = Now()
    Range(SavedLoc).Value = Format(Etime, "hh:mm:ss")              ' Here
    Application.OnTime SchdTime + OneSec, "NextTick"
End Sub

Private Sub ResetBtn_Click()
    Range(SavedLoc).Interior.ColorIndex = -4142                    ' Here

    StopTimer = True
    Etime = 0
    Range(SavedLoc).Value = "00:00:00"                             ' Here
    SavedLoc = nul                                                 ' Here
End Sub

Private Sub StopBtn_Click()
    Range(SavedLoc).Interior.ColorIndex = 4                        ' Here
    StopTimer = True
    SavedLoc = nul                                                 ' Here
    Beep
End Sub

Sub NextTick()
    If StopTimer Then
        'Don't reschedule update
    Else
        Range(SavedLoc).Value = Format(Etime, "hh:mm:ss")          ' Here
        SchdTime = SchdTime + OneSec
        Application.OnTime SchdTime, "NextTick"
        Etime = Etime + OneSec
    End If
End Sub

Если вы хотите запускать таймеры в нескольких ячейках одновременно, то это становится намного сложнее, и вам следует обратиться к комментариям к вашему другому вопросу.

0

В Excel вы можете использовать свойство selection для адресации того, что выбрано или активно на вашем рабочем листе.

Обратите внимание, однако, что это может вызвать проблемы в будущем, так как код становится более сложным, и использование selection обычно не лучший метод.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .