Vba 已解决-子应用程序_Quit()清除已定义变量的值

Vba 已解决-子应用程序_Quit()清除已定义变量的值,vba,outlook,Vba,Outlook,我试图实现的一个简单想法是在Outlook关闭时弹出一个消息框,告诉您Outlook打开的时间和关闭的时间。以下是我尝试实现这一目标的代码: Private startTime As String Private endTime As String Private Sub Application_Startup() startTime = CStr(TimeValue(Now)) End Sub Private Sub Application_Quit() endTime =

我试图实现的一个简单想法是在Outlook关闭时弹出一个消息框,告诉您Outlook打开的时间和关闭的时间。以下是我尝试实现这一目标的代码:

Private startTime As String
Private endTime As String

Private Sub Application_Startup()
    startTime = CStr(TimeValue(Now))
End Sub

Private Sub Application_Quit()
    endTime = CStr(TimeValue(Now))

    MsgBox _
        "Session started at " + startTime + vbNewLine + _
        "Session ended at " + endTime, _
        vbOkOnly + vbInformation, _
        "Session Information"
End Sub
这就是我期望得到的:

但是,我遇到的问题是,当触发应用程序_Quit()时,我的变量被清除。我收到此消息框:

我知道startTime在应用程序启动()时被赋予了一个值。当我将以下代码行添加到应用程序_Startup()的末尾时,我会收到下面的消息框

    MsgBox _
        "Session started at " + startTime, _
        vbOkOnly + vbInformation, _
        "Session Information"

为什么
Application\u退出()
强制
startTime=“”
,有什么办法吗


已解决-多亏了Adirmola-使用FSO创建临时文本文件,不再需要全局变量
startTime
endTime
,因为它们的值存储在临时文件中,并在
应用程序退出()过程中调用


使用FSO创建临时文本文件时,不需要全局变量
startTime
endTime
,因为它们的值存储在临时文件中,并在
应用程序退出()过程中调用


使用FSO创建临时文本文件时,不需要全局变量
startTime
endTime
,因为它们的值存储在临时文件中,并在
应用程序退出()过程中调用


你能提供更多的信息吗?这些是在一个模块中运行,还是在应用程序级别运行,等等?问题是全局变量生存期-。我想解决这个问题的一种方法是使用文本文件临时存储开始时间。@TylerH SUB不会从任何地方显式调用。据我所知,“Application_Startup()”和“Application_Quit()”是内置函数,分别在Outlook应用程序打开和关闭时执行。它们在应用程序级别运行,位于“ThisOutlookSession”中。谢谢@Adirmola!使用文本文件似乎可以做到这一点。问答网站也是如此。如果你发现了自己的答案,应该将其作为自己的答案发布,而不是编辑到问题中。你能提供更多的信息吗?这些是在一个模块中运行,还是在应用程序级别运行,等等?问题是全局变量生存期-。我想解决这个问题的一种方法是使用文本文件临时存储开始时间。@TylerH SUB不会从任何地方显式调用。据我所知,“Application_Startup()”和“Application_Quit()”是内置函数,分别在Outlook应用程序打开和关闭时执行。它们在应用程序级别运行,位于“ThisOutlookSession”中。谢谢@Adirmola!使用文本文件似乎可以做到这一点。问答网站也是如此。如果你发现了自己的答案,应该将其作为自我答案发布,而不是编辑到问题中。
Private FSO As Object
Private oFile As Object

Private Sub Application_Startup()
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set oFile = FSO.CreateTextFile("C:\Users\username\Documents\Outlook Files\temp.txt")
    
    oFile.WriteLine "Session started at " + CStr(TimeValue(Now))
    oFile.Close
    
    Set oFile = Nothing
    Set FSO = Nothing
End Sub

Private Sub Application_Quit()
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set oFile = FSO.OpenTextFile("C:\Users\username\Documents\Outlook Files\temp.txt")
    
    MsgBox _
        oFile.readline + vbNewLine + _
        "Session ended at " + CStr(TimeValue(Now)), _
        vbOKOnly + vbInformation, _
        "Session Information"
    
    oFile.Close
    Set oFile = Nothing
    FSO.DeleteFile ("C:\Users\username\Documents\Outlook Files\temp.txt")
    Set FSO = Nothing
End Sub
Private FSO As Object
Private oFile As Object

Private Sub Application_Startup()
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set oFile = FSO.CreateTextFile("C:\Users\username\Documents\Outlook Files\temp.txt")

    oFile.WriteLine "Session started at " + CStr(TimeValue(Now))
    oFile.Close

    Set oFile = Nothing
    Set FSO = Nothing
End Sub

Private Sub Application_Quit()
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set oFile = FSO.OpenTextFile("C:\Users\username\Documents\Outlook Files\temp.txt")

    MsgBox _
        oFile.readline + vbNewLine + _
        "Session ended at " + CStr(TimeValue(Now)), _
        vbOKOnly + vbInformation, _
        "Session Information"

    oFile.Close
    Set oFile = Nothing
    FSO.DeleteFile ("C:\Users\username\Documents\Outlook Files\temp.txt")
    Set FSO = Nothing
End Sub