Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何使计时器从上次停止的时间开始,而不是每次都重置_Excel_Vba_Timer - Fatal编程技术网

Excel 如何使计时器从上次停止的时间开始,而不是每次都重置

Excel 如何使计时器从上次停止的时间开始,而不是每次都重置,excel,vba,timer,Excel,Vba,Timer,在a列中输入一个值。 要开始,请双击A列中的值。 要停止,请双击任何空白单元格。 秒表在B2单元运行 Public stopMe As Boolean Public resetMe As Boolean Public myVal As Variant Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column = 1 Then If

在a列中输入一个值。 要开始,请双击A列中的值。 要停止,请双击任何空白单元格。 秒表在B2单元运行

Public stopMe As Boolean
Public resetMe As Boolean
Public myVal As Variant

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Column = 1 Then
        If Target.Value = myVal And Target.Value <> "" Then
            'Changed
            Dim startTime, finishTime, totalTime, timeRow
            startTime = Timer
            stopMe = False
            resetMe = False
            myTime = Target.Offset(, 2).Value
            Target.Offset(, 1).Select
startMe:
            DoEvents
            timeRow = Target.Row
            finishTime = Timer
            totalTime = finishTime - startTime
            Target.Offset(, 1).Value = Format(800 + totalTime, "0000")
            If resetMe = True Then
                Target.Offset(, 1).Value = 0
                Target.Offset(, 2).Value = 0
                stopMe = True
            End If
            If Not stopMe = True Then
                Target.Offset(, 2).Value = totalTime
                GoTo startMe
            End If
            Cancel = True
            End
        Else
            'Not Changed
            stopMe = True
            Cancel = True
        End If
    End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    myVal = Target.Value
End Sub
Public stopMe作为布尔值
将我重置为布尔值
作为变体的公共myVal
双击之前的专用子工作表(ByVal目标作为范围,Cancel作为布尔值)
如果Target.Column=1,则
如果Target.Value=myVal且Target.Value为“”,则
"变了
暗淡的开始时间、结束时间、总时间、时间行
开始时间=计时器
stopMe=False
resetMe=False
myTime=Target.Offset(,2).Value
Target.Offset(,1)。选择
开始:
多芬特
timeRow=Target.Row
完成时间=计时器
totalTime=完成时间-开始时间
Target.Offset(,1).Value=格式(800+总时间,“0000”)
如果resetMe=True,则
Target.Offset(,1).Value=0
Target.Offset(,2).Value=0
stopMe=True
如果结束
如果不是stopMe=True,则
Target.Offset(,2).Value=总时间
后藤星
如果结束
取消=真
终点
其他的
"不变"
stopMe=True
取消=真
如果结束
如果结束
端接头
专用子工作表\u选择更改(ByVal目标作为范围)
myVal=Target.Value
端接头

如何使计时器从上次停止的时间开始,而不是每次都重置,我想这对您很有用

Option Explicit
Dim CmdStop As Boolean
Dim Paused As Boolean
Private Sub btnStart_Click()
    CmdStop = False
    Paused = False
    Dim TimerValue As Date
    Dim pausedTime As Date
    Start = Now()    ' Set start time.
    btnPause.Enabled = True
    btnStop.Enabled = True
    btnReset.Enabled = False
    Do While CmdStop = False
        If Not Paused Then
            TimerValue = Now() - Start - pausedTime
        Else
            pausedTime = Now() - TimerValue - Start
        End If
        TimerReadOut.Caption = Format(TimerValue, "h:mm:ss")
        DoEvents    ' Yield to other processes.
    Loop
End Sub
Private Sub btnPause_Click()
    If btnPause.Caption = "Pause" Then
        Paused = True
        btnPause.Caption = "Continue"
    Else
        Paused = False
        btnPause.Caption = "Pause"
    End If

End Sub
Private Sub BtnReset_Click()
    TimerReadOut.Caption = "0:00:00"
    btnStop.Enabled = False
End Sub
Sub BtnStop_Click()
    btnPause.Enabled = False
    btnReset.Enabled = True
    btnStop.Enabled = False
    CmdStop = True
End Sub

尝试将停止超时写入某个特定Excel工作表上的单元格,然后在下次开始时选择该数字。这将为您提供一个全局值,您可以用于不同的启动