我对 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
使用通常不是最好的方法。
答案2
Selection
我建议您不要在所有代码中使用,而是Selection
在调用时使用 来标识当前选定的单元格StartBtn
,保存该位置,然后在其他例程中使用它;例如,
Dim StopTimer 作为布尔值 Dim SchdTime 作为日期 Dim Etime 作为日期 Dim SavedLoc 作为变量 ' 这里 Const OneSec As Date = 1 / 86400# 私有子类 StartBtn_Click() 如果 Selection.Count <> 1 则 MsgBox“请选择一个单元格。” 退出子程序 万一 SavedLoc = 选择.地址 ' 这里 范围(保存的位置).Interior.ColorIndex = 6 ' 这里 停止计时器 = 假 时间安排 = 现在() 范围(保存的位置).Value = Format(Etime, "hh:mm:ss") ' 这里 Application.OnTime SchdTime + OneSec,“NextTick” 子目录结束 私有子程序 ResetBtn_Click() 范围(保存的位置).Interior.ColorIndex = -4142 ' 这里 停止计时器 = 真 E时间 = 0 范围(保存的位置).Value = "00:00:00" ' 这里 SavedLoc = nul ' 这里 子目录结束 私有子程序 StopBtn_Click() 范围(保存的位置).Interior.ColorIndex = 4 ' 这里 停止计时器 = 真 SavedLoc = nul ' 这里 嘟 子目录结束 子 NextTick() 如果 StopTimer 那么 “不要重新安排更新 别的 范围(保存的位置).Value = Format(Etime, "hh:mm:ss") ' 这里 调度时间 = 调度时间 + 一秒 应用程序.OnTime SchdTime,“NextTick” Etime = Etime + OneSec 万一 子目录结束
如果你想同时在多个单元格中运行计时器,那么它会变得更加复杂,你应该参考你的其它问题。