【问题标题】:How to call the quit/close event in outlook 2007 VBA如何在 Outlook 2007 VBA 中调用退出/关闭事件
【发布时间】:2020-06-25 15:45:44
【问题描述】:

这个问题很简单,但由于某种原因对我来说很难实现。关闭 Outlook 2007 时如何触发退出/关闭事件?

我想在 VBA 中显示一个是/否 msgbox,它根据关闭 Outlook 时选择的选项执行代码。

我认为我有解决方案:

Dim WithEvents myOlApp As Outlook.Application

Sub Initialize_handler()
    Set myOlApp = CreateObject("Outlook.application")
End Sub

Private Sub myOlApp_Quit()
    MsgBox "TEST"
End Sub

首先我尝试将它插入到我的模块中,但这给了我Only valid in object modules 错误。所以然后我创建了一个新的类模块并将代码粘贴到这里(没有给出错误),但事件仍然不会触发。出了什么问题以及如何解决?

【问题讨论】:

  • 不确定它在 2007 年是否与 2010 年相同。但我的项目中有一个 Microsoft Outlook 对象,甚至其中还有一个 private sub Application_Quit。所以你可以从中调用一个函数
  • 试图将子模块作为常规模块插入到两个类模块中,但遗憾的是没有触发。
  • @Sam:刚刚看到你的评论。我已经删除了我的答案。这也适用于我。这是一个有效的答案,前提是 2007 年的行为方式与 2010 年相同,我相信它会(除非我错了)你可能想把这个答案?
  • @SiddharthRout 你的回答成功了,谢谢!但是有一个问题,模块保存在 VBAProject.OTM 文件中。此文件位于共享文件夹中,以便使用其 Outlook 的每个人都可以获取更新/代码。使用ThisOutlookSession 时,这是否意味着我必须将Private Sub Application_Quit() 粘贴到在各自“自己的会话”中使用代码的每个Outlook 用户?我假设现在只有这个用户获得了 msgbox(ThisSession 所属的用户)。
  • This 是您要找的吗?

标签: vba outlook


【解决方案1】:

设置 myOlApp = CreateObject("Outlook.application")

无需创建新的 Outlook 实例。您应该使用 Outlook VBA 中可用的 Application 属性。

Private Sub Application_Quit() 
  MsgBox "Goodbye, " & Application.GetNamespace("MAPI").CurrentUser  
End Sub

查看 MSDN 中的 Getting Started with VBA in Outlook 2010 文章。

【讨论】:

  • 你看到问题下面的cmets了吗? :)
  • 有人说CreateObject("Outlook.application")吗?
  • 在 Sam 的评论之后,该行变得多余 ;)
  • 我觉得我很有礼貌。请不要利用它:)
  • 对于其他磕磕绊绊的人,我发现这段代码必须在ThisOutlookSession内;它不会从另一个模块中按原样为我运行
猜你喜欢
  • 2015-07-16
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多