Реализация 3 различных макросов для нескольких ячеек на листе путем выбора

Реализация 3 различных макросов для нескольких ячеек на листе путем выбора

Я полный нуб и в 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 вы можете использоватьвыборсвойство для указания того, что выбрано или активно на вашем рабочем листе.

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

решение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
    Конец Если
Конец субтитра

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

Связанный контент