
我對 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 萬一 結束子
如果你想同時在多個單元格中運行計時器,那麼它會變得更加複雜,你應該參考你的另一個問題。