打开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
答案 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。
当我尝试将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打开了引用