即使全局变量已在子vba中设置,它们也是空的

时间:2015-08-05 08:57:42

标签: vba excel-vba scope global-variables is-empty

尝试在VBA中创建计时器。我的意图是能够在其他功能中调用TimerStartTimerLapsTimerStop来估算代码块完成所需的时间。但我的全局变量是空的,我遇到了问题。

Private starttime As Double   

Sub TimerStart()
    starttime = Timer
End Sub

Function TimerLaps() As Double
    TimerLaps = Timer - starttime
End Function

Function TimerStop() As Double
    i = starttime
    starttime = 0
    TimerStop = Round(Timer - i, 2)
End Function

Sub test()
    Call TimerStart

    MsgBox TimerStop()
End Sub

谢谢你们!

2 个答案:

答案 0 :(得分:1)

您可以两种方式使用:

Global starttime As Double 

Public starttime As Double 

使用其中一个而不是Private。主要的不同是:

  

全局只能在标准模块中使用,而公共可以在所有上下文中使用(模块,类,控件,表单等)。 strong>全球来自旧版本的VB,可能会保留向后兼容性,但已被公开完全取代。

答案 1 :(得分:0)

尝试:

Global starttime As Double 

位于模块顶部 (而不是Private starttime As Double

修改

Global starttime As Double

Sub test()
    Call TimerStart
    Application.Wait (Now + #12:00:02 AM#)
    MsgBox TimerStop()
End Sub

Sub TimerStart()
    starttime = Timer
End Sub

Function TimerStop() As Double
    Dim i As Double
    i = starttime
    starttime = 0
    TimerStop = Round(Timer - i, 2)
End Function