Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 用户将文档附加到电子邮件时是否会发生Outlook事件?_Vba_Vb.net_Outlook_Outlook Addin - Fatal编程技术网

Vba 用户将文档附加到电子邮件时是否会发生Outlook事件?

Vba 用户将文档附加到电子邮件时是否会发生Outlook事件?,vba,vb.net,outlook,outlook-addin,Vba,Vb.net,Outlook,Outlook Addin,我正在做一个检查电子邮件附件大小的项目,当发件人试图附加一个大文档时,它会通知发件人。我首先使用的示例代码如所示,它在运行子TestAttachAddd()时工作得非常好。但是,在代码运行时,当我手动创建新电子邮件并向其附加文件时,不会触发AttachmentAdd事件 我是否错误地使用了私有子项“newItem_AttachmentAdd”来完成我的任务 或者,当用户将文档(使用“附加文件”功能区按钮或通过拖放)附加到新电子邮件时,是否还有其他Outlook事件可用于检测 Public Wit

我正在做一个检查电子邮件附件大小的项目,当发件人试图附加一个大文档时,它会通知发件人。我首先使用的示例代码如所示,它在运行子TestAttachAddd()时工作得非常好。但是,在代码运行时,当我手动创建新电子邮件并向其附加文件时,不会触发AttachmentAdd事件

我是否错误地使用了私有子项“newItem_AttachmentAdd”来完成我的任务

或者,当用户将文档(使用“附加文件”功能区按钮或通过拖放)附加到新电子邮件时,是否还有其他Outlook事件可用于检测

Public WithEvents newItem As Outlook.MailItem

Private Sub newItem_AttachmentAdd(ByVal newAttachment As Attachment)
    If newAttachment.Type = olByValue Then
        newItem.Save
        If newItem.Size > 500 Then '500 bytes used for testing purposes only 
            MsgBox "Warning: Item size is now " & newItem.Size & " bytes."
        End If
    End If
End Sub

Public Sub TestAttachAdd()
    Dim olApp As New Outlook.Application
    Dim atts As Outlook.Attachments
    Dim newAttachment As Outlook.Attachment

    Set newItem = olApp.CreateItem(olMailItem)  
    newItem.Subject = "Test attachment"
    Set atts = newItem.Attachments
    Set newAttachment = atts.Add("C:\Test.txt", olByValue)
End Sub
--------------------------更新最新工作版本1/27/2014

Public WithEvents goInspectors As outlook.Inspectors
Public WithEvents newItem As outlook.MailItem

Private Sub Initialize_Handlers()
    Set goInspectors = outlook.Application.Inspectors
End Sub

Private Sub Application_Startup()
    Initialize_Handlers
End Sub

Private Sub goInspectors_NewInspector(ByVal Inspector As Inspector)
    If Inspector.CurrentItem.Class = olMail Then
        Set newItem = Inspector.CurrentItem
    End If
End Sub

Private Sub newItem_AttachmentAdd(ByVal newAttachment As Attachment)
    If newAttachment.Type = olByValue Then
        newItem.Save
        If newItem.Size > 500 Then '500 bytes used for testing purposes only
            MsgBox "Warning: Item size is now " & newItem.Size & " bytes."
        End If
    End If
End Sub

您需要将事件处理程序附加到正确的MailItem对象


捕获Application.Inspectors.NewInspector事件,然后从Inspector.CurrentItem检索新项目。

Dmitry,感谢您回答我几乎所有的noob问题!不幸的是,我不太清楚你在说什么,我认为这超出了我对VB的基本理解。你有没有一个例子,我可以看看或指向我的网站,这样做?再次感谢!我在上找到了一个代码片段,其中显示了一个功能正常的AttachmentAdd。但它仍然需要先运行初始化Handler sub。有没有一种方法可以让它自动运行,这样我就可以在用户尝试添加附件时进行检测?您的代码在哪里运行?它是一个独立的应用程序还是一个COM插件?这是在VBA中。我可以在应用程序启动时设置检查器,现在它可以工作了。谢谢,德米特里!发现了一个bug。转载最新版本。因此,如果我打开一封新邮件,开始处理它,然后打开另一封邮件,如果我切换回第一封邮件并尝试附加文档,那么大小检查将不起作用。我认为这与我如何设置新项目有关。是否有办法将最上面的项目设置为新项目?我尝试使用ActiveInspector.CurrentItem,但我不知道如何使其保持“轮询”,并且我无法从
newItem\u AttachmentAdd
中执行此操作。有什么想法吗?谢谢