透過選擇在工作表中的多個儲存格上實現 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 中,您可以使用選擇屬性來處理工作表中選定或活動的內容。

selection但請注意,隨著程式碼變得更加複雜並且使用is ,這可能會導致進一步的問題通常不是最好的方法。

答案2

Selection我建議您Selection在呼叫 時使用 來識別當前選定的單元格StartBtn,保存該位置並在其他例程中使用它,而不是在所有程式碼中使用它;例如,

將 StopTimer 調暗為布林值
Dim SchdTime 作為日期
將 Etime 設為日期
Dim SavedLoc 作為變體                                 ' 這裡
常數 OneSec 作為日期 = 1 / 86400#

私有子 StartBtn_Click()
    如果 Selection.Count <> 1 那麼
        MsgBox "請選取一個儲存格。"
        退出子程序
    萬一
    SavedLoc = 選擇.地址                                   ' 這裡
    範圍(已儲存位置).Interior.ColorIndex = 6 ' 這裡
    停止定時器=假
    SchdTime = Now()
    範圍(已儲存位置).Value = Format(Etime, "hh:mm:ss") ' 這裡
    Application.OnTime SchdTime + OneSec,“NextTick”
結束子

私有子 ResetBtn_Click()
    範圍(已儲存位置).Interior.ColorIndex = -4142 ' 這裡

    停止定時器 = True
    時間 = 0
    範圍(已儲存位置).Value = "00:00:00" ' 這裡
    已儲存位置 = nul                                                 ' 這裡
結束子

私有子 StopBtn_Click()
    範圍(已儲存位置).Interior.ColorIndex = 4 ' 這裡
    停止定時器 = True
    已儲存位置 = nul                                                 ' 這裡
結束子

子 NextTick()
    如果停止定時器那麼
        '不要重新安排更新
    別的
        範圍(已儲存位置).Value = Format(Etime, "hh:mm:ss") ' 這裡
        SchdTime = SchdTime + OneSec
        Application.OnTime SchdTime,“NextTick”
        Etime = Etime + OneSec
    萬一
結束子

如果你想同時在多個單元格中運行計時器,那麼它會變得更加複雜,你應該參考你的另一個問題

相關內容