为什么 Outlook VBA 运行 中的 "Quit" 事件没有通过 class 模块?
Why doesn't the "Quit" event in Outlook VBA run a passed class module?
我有一个宏,在关闭 Outlook 客户端时,私有变量被设置为 class 模块的一个实例。代码 运行 没问题,没有抛出任何错误。然而,传递的 class 模块(如果我使用了错误的术语,请纠正我)没有它的子程序 运行.
目标是在应用程序退出时创建并保存新的注释项。
来自“ThisOutlookSession”(Microsoft Outlook 对象):
Option Explicit
Private ShutdownTrigger As Class2
Private Sub Application_Quit()
Set ShutdownTrigger = New Class2
End Sub
来自“Class2”(Class 模块):
Option Explicit
Private Sub ExitApp()
Dim olApp As Outlook.Application
Dim olNS As Outlook.NameSpace
Dim olNoteItm As Outlook.NoteItem
Set olApp = Outlook.Application
Set olNS = olApp.GetNamespace("MAPI")
Set olNoteItm = olApp.CreateItem(olNoteItem)
With olNoteItm
.Body = "murphy"
End With
olNoteItm.Save
End Sub
目前没有创建新笔记。请注意,子例程“ExitApp”代码在放置在“ThisOutlookSession”对象中时有效。
此外,作为一个可能不相关的问题,我是否需要创建一个私有变量“Shutdown Trigger”,或者我是否可以像在大多数子例程中那样使用 Dim 语句?
感谢您的帮助!
首先,代码中不需要新建OutlookApplication
实例来创建新的笔记项Outlook。相反,您可以在 ThisOutlookSession
模块中获取一个 Application
实例并将其传递给方法。
其次,您需要在创建的对象上调用 ExitApp 方法:
Option Explicit
Private ShutdownTrigger As Class2
Private Sub Application_Quit()
Set ShutdownTrigger = New Class2
ShutdownTrigger.ExitApp()
End Sub
三、方法可能如下:
Option Explicit
Private Sub ExitApp(olApp As Outlook.Application)
Dim olNS As Outlook.NameSpace
Dim olNoteItm As Outlook.NoteItem
Set olNS = olApp.GetNamespace("MAPI")
Set olNoteItm = olApp.CreateItem(olNoteItem)
With olNoteItm
.Body = "murphy"
End With
olNoteItm.Save
End Sub
在 VBA Class Modules – The Ultimate Guide 文章的 VBA 中阅读有关 class 模块的更多信息。
我有一个宏,在关闭 Outlook 客户端时,私有变量被设置为 class 模块的一个实例。代码 运行 没问题,没有抛出任何错误。然而,传递的 class 模块(如果我使用了错误的术语,请纠正我)没有它的子程序 运行.
目标是在应用程序退出时创建并保存新的注释项。
来自“ThisOutlookSession”(Microsoft Outlook 对象):
Option Explicit
Private ShutdownTrigger As Class2
Private Sub Application_Quit()
Set ShutdownTrigger = New Class2
End Sub
来自“Class2”(Class 模块):
Option Explicit
Private Sub ExitApp()
Dim olApp As Outlook.Application
Dim olNS As Outlook.NameSpace
Dim olNoteItm As Outlook.NoteItem
Set olApp = Outlook.Application
Set olNS = olApp.GetNamespace("MAPI")
Set olNoteItm = olApp.CreateItem(olNoteItem)
With olNoteItm
.Body = "murphy"
End With
olNoteItm.Save
End Sub
目前没有创建新笔记。请注意,子例程“ExitApp”代码在放置在“ThisOutlookSession”对象中时有效。
此外,作为一个可能不相关的问题,我是否需要创建一个私有变量“Shutdown Trigger”,或者我是否可以像在大多数子例程中那样使用 Dim 语句?
感谢您的帮助!
首先,代码中不需要新建OutlookApplication
实例来创建新的笔记项Outlook。相反,您可以在 ThisOutlookSession
模块中获取一个 Application
实例并将其传递给方法。
其次,您需要在创建的对象上调用 ExitApp 方法:
Option Explicit
Private ShutdownTrigger As Class2
Private Sub Application_Quit()
Set ShutdownTrigger = New Class2
ShutdownTrigger.ExitApp()
End Sub
三、方法可能如下:
Option Explicit
Private Sub ExitApp(olApp As Outlook.Application)
Dim olNS As Outlook.NameSpace
Dim olNoteItm As Outlook.NoteItem
Set olNS = olApp.GetNamespace("MAPI")
Set olNoteItm = olApp.CreateItem(olNoteItem)
With olNoteItm
.Body = "murphy"
End With
olNoteItm.Save
End Sub
在 VBA Class Modules – The Ultimate Guide 文章的 VBA 中阅读有关 class 模块的更多信息。