通过选择在工作表中的多个单元格上实现 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使用通常不是最好的方法。

答案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
    万一
子目录结束

如果你想同时在多个单元格中运行计时器,那么它会变得更加复杂,你应该参考你的其它问题

相关内容