
Я полный нуб и в Excel, и в VBA и пытаюсь придумать код, который может дать мне таймер и изменение цвета ячейки, которое происходит, когда я нажимаю на мои три кнопки StartBtn, StopBtn и ResetBtn. Прямо сейчас я получил код, который работает для одной ячейки B3, но мне нужно, чтобы кнопки работали для любой ячейки на листе, по которой нажимают. Я вставляю код ниже и надеюсь, что вы, ребята, будете достаточно любезны, чтобы пройтись по коду и спасти этого запутавшегося нуба.
Код:
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
решение1
В Excel вы можете использоватьвыборсвойство для указания того, что выбрано или активно на вашем рабочем листе.
Однако следует отметить, что это может вызвать проблемы в дальнейшем, поскольку код становится более сложным и использование selection
isобычноне лучший метод.
решение2
Вместо того, чтобы использовать Selection
во всем коде, я предлагаю вам использовать Selection
для определения текущей выбранной ячейки при вызове StartBtn
, сохранять это местоположение и использовать его в других процедурах, например,
Dim StopTimer как логическое значение Dim SchdTime как дата Dim Etime как дата Dim SavedLoc как вариант ' Здесь Константа OneSec как дата = 1 / 86400# Частная подписка StartBtn_Click() Если Выборка.Количество <> 1 Тогда MsgBox "Пожалуйста, выберите одну ячейку." Выйти из подменю Конец Если SavedLoc = Выборка.Адрес ' Здесь Диапазон (СохраненоЛок).Interior.ColorIndex = 6 ' Здесь StopTimer = Ложь SchdTime = Сейчас() Диапазон (СохраненоЛок).Value = Format(Etime, "чч:мм:сс") ' Здесь Приложение.OnTime SchdTime + OneSec, "NextTick" Конец субтитра Частный Суб ResetBtn_Click() Диапазон (СохраненоЛок).Interior.ColorIndex = -4142 ' Здесь StopTimer = Истина Eвремя = 0 Диапазон (СохраненоЛок).Значение = "00:00:00" ' Здесь SavedLoc = ноль ' Здесь Конец субтитра Частный подписчик StopBtn_Click() Диапазон (СохраненоЛок).Interior.ColorIndex = 4 ' Здесь StopTimer = Истина SavedLoc = ноль ' Здесь Бип Конец субтитра Под NextTick() Если StopTimer Тогда «Не переносите обновление» Еще Диапазон (СохраненоЛок).Value = Format(Etime, "чч:мм:сс") ' Здесь SchdTime = SchdTime + OneSec Application.OnTime SchdTime, "NextTick" Etime = Etime + OneSec Конец Если Конец субтитра
Если вы хотите запустить таймеры в нескольких ячейках одновременно, то это становится намного сложнее, и вам следует обратиться к комментариям наВаш другой вопрос.