我一直在制作一本个人使用的工作簿,其中一张工作表记录了我的工作时间。我的工作时间都是手动输入并自动计算的。我想要实现的是将单元格链接到复选框或按钮并记录选中复选框的时间。例如,当打卡时,我会选中一个框或按下一个按钮,时间会被记录下来,但不会更新。我还不太熟悉宏或 VBA,所以任何帮助都会很感激。
编辑:我创建了一个基于是否选中复选框的公式和当前时间晚于打卡和下班打卡列。这是单元格 R14 中的公式:=IF(AND(AND(N14,NOW()>O14),AND(P14,NOW()>=Q14)),Q14-O14,NOW()-O14)
N14 和 P14 中的复选框链接到它们所在的单元格,单元格 O14 和 Q14 中的值只是格式化为显示日期和时间时钟的时间值
这是我目前的工作内容
答案1
由于您没有提供任何关于您希望它看起来如何或当前跟踪如何完成的示例,我只是制作了某种时间跟踪器,跟踪秒数。
所以我做了一个计时器,如下所示:
添加一个按钮,并在您想要跟踪时间的单元格中添加 00:00:00 作为时间。
在我的情况下,这是单元格C2
,我称之为timerPos
。
然后我使用单元格A1
或任何其他备用单元格来跟踪时间,如果我正在录制,我将其称为trackerPos
。
然后当我按下按钮时,它最初看起来是这样的:
当我完成计时后,我再次按下按钮。跟踪器被清除,计时器被更新:
现在,最重要的部分;按钮的代码。
Sub timer()
Dim timeL As Long, timerPos As Range, trackerPos As Range
Set timerPos = Range("C2")
Set trackerPos = Range("A1")
If trackerPos.Value = "" Then
trackerPos.Value = Now
Else
timeL = Abs(Now - trackerPos.Value) * 86400
timerPos.Value = DateAdd("s", timeL, timerPos.Value)
timerPos.NumberFormat = "[h]:mm:ss"
trackerPos.Value = ""
End If
End Sub
timerPos
用法:可以轻松更改变量trackerPos
以满足您想要保留计时器的位置的需求。
该Else
部分的第一行转换当前时间和跟踪器中的时间差。
第二行将时间添加到计时器。第三行阻止格式在超过 24 小时时显示日期。
编辑
如果我们想将每次录音的时间限制为 8 小时,我们只需要添加一个小的If
。8
小时是 28800 秒,因此我们检查 timeL 是否大于这个数字,如果是,则将其设置为这个数字。
timeL = Abs(Now - trackerPos.Value) * 86400
If timeL > 28800 Then
timeL = 28800
End If
timerPos.Value = DateAdd("s", timeL, timerPos.Value)
在此过程中,我给按钮添加了一些颜色和文本的变化,以帮助视觉显示计时器正在滴答作响。
Sub timer()
Dim timeL As Long, timerPos As Range, trackerPos As Range, button As Variant
Set button = ActiveSheet.Buttons("Button 1") 'Make sure this is the right button
Set timerPos = Range("C2")
Set trackerPos = Range("A1")
If trackerPos.Value = "" Then
trackerPos.Value = Now
button.Characters.Text = "Stop timer"
button.Font.ColorIndex = 3
Else
timeL = Abs(Now - trackerPos.Value) * 86400
If timeL > 28800 Then
timeL = 28800
End If
timerPos.Value = DateAdd("s", timeL, timerPos.Value)
timerPos.NumberFormat = "[h]:mm:ss"
trackerPos.Value = ""
button.Text = "Start timer"
button.Font.ColorIndex = 50
End If
End Sub