Outlook VBA Application_Startup()无法启动

时间:2018-10-02 19:02:20

标签: vba outlook outlook-vba

打开Outlook时,我很难启动我的Application_Startup例程。我已将其放置在“ ThisOutlookSession” Outlook对象中。但是,Application_ItemSend中的脚本可以正常工作(发送邮件时会正确触发事件)。

在打开Outlook后手动启动Application_Startup宏时,它运行良好-而不是在启动时自动运行。

将sub设为私有没有区别-也没有将变量设为公开。

我在信任中心的“启用所有宏”上有宏设置。

我正在运行Windows 10 Enterprise的PC上使用Outlook 2016。

我已经对该问题进行了深入研究,但似乎无法找出导致例程无法触发的原因。

任何帮助将不胜感激!

Option Explicit

Dim add_str As String

Public Sub Application_Startup()

    Dim olNs As Outlook.NameSpace
    Dim Folder As Outlook.MAPIFolder
    Dim SubFolder As Outlook.MAPIFolder
    Dim Item As Object

    Set olNs = Application.GetNamespace("MAPI")
    Set Folder = olNs.Folders("albrobin@workmail.com").Folders("WORKFLOW").Folders("Reporting")

    For Each SubFolder In Folder.Folders
        If SubFolder.items.Restrict("[UnRead] = True").Count > 0 Then
            For Each Item In SubFolder.items
                Item.UnRead = False
            Next
        End If
    Next

End Sub

Public Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

    If TypeName(Item) <> "MailItem" Then
        Exit Sub
    End If

    If Item.Subject Like "RE: *" _
        Or Item.Subject Like "AW: *" _
        Or Item.Subject Like "FW: *" Then
        Exit Sub
    End If

    UserForm1.Show

    If add_str = "[URGENT] " Then
        Item.Importance = olImportanceHigh
    End If

    Item.Subject = add_str & Item.Subject

    add_str = vbNullString

End Sub
Public Sub routine(str_ As String)
    add_str = Replace(str_, vbCrLf, " ")
    add_str = "[" & add_str & "] "
End Sub
Sub show_form1()
    UserForm1.Show
End Sub

4 个答案:

答案 0 :(得分:2)

我测试了您的代码,但遇到了同样的问题。 我已经通过重新启动PC并添加Public Sub Application_Quit()方法解决了这个问题。

答案 1 :(得分:2)

Outlook中似乎有一个标志用于检查VBA代码。如果找不到,它将在每次关闭时将注册表值(HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ XX.0 \ Outlook \ LoadMacroProviderOnBoot)设置为0。它似乎没有设置好,因此可以通过复制OTM文件来检测何时添加代码。 我发现了2种情况(可能还有更多种情况),这些情况导致标志被设置,导致Outlook在关闭时将注册表值更改为1。

  1. 如果运行任何宏
  2. Visual Basic编辑器已打开。

当我尝试将VBA代码推出到没有现有VBA代码的新PC时,问题就出现了。

我使用批处理脚本将我的VBA代码发布到其他计算机上并进行修复,我将代码复制到计算机上后(将密钥设置为1),只需在bat文件中添加一个REG ADD命令即可。

添加REG HKCU \ Software \ Microsoft \ Office \ XX.0 \ Outlook / v LoadMacroProviderOnBoot / t REG_DWORD / d 1 / f

您需要将“ XX.0”更改为您要处理的Office版本。检查注册表以找出答案。

这似乎迫使Outlook在启动时检查VBA代码。

(感谢Microsoft TechNet论坛上的Sergik718指出更改此注册表项会有所帮助。)

答案 2 :(得分:0)

在重新加载和还原我的VBAProject后,Application_Startup()过程也无法启动时遇到了同样的问题。检查宏设置,对项目进行数字签名-祝您好运。在启动期间(如在Office 2010中)未收到用于启用VBA的按钮。VBA可以运行,但需要我手动触发Application_Startup()过程。

试图创建一个新的临时“ Private Application_Startup()”过程,但没有任何乐趣。

我删除了Application_Startup()声明之前的“公共”语句。保存,关闭的VBA和Outlook。重新打开,突然开始工作。恢复了“公共”,保存后重新打开,现在看来可以正常工作。没有解释。

答案 3 :(得分:0)

有类似的问题。 Application_Startup没有在重新启动Outlook时触发,因此我对函数的更改没有加载。 Application_Startup没有触发的原因是因为我有另一个程序对Outlook打开了引用