温馨提示:本文翻译自stackoverflow.com,查看原文请点击:vba - Automatically saving attachments of certain emails
outlook vba

vba - 自动保存某些电子邮件的附件

发布于 2020-04-04 00:01:03

我正在尝试编写一个宏,以自动保存在工作中通过电子邮件获得的某些报告。另一个部门的位置非常相似,因此我可以重用他们的许多代码。但是,他们无法真正向我解释代码某些部分的功能,并且对其进行谷歌搜索并不是特别有用。

如果有帮助,我将发布整个代码,我将其遗漏了,因为a)我必须编辑一些东西(名称等),b)我认为这与我的问题无关。

代码的重点是在启动时宏会启动;然后会检查每封新电子邮件(发件人;主题行;附件)。我很难理解代码的启动部分,因为我一般对VBA并不了解,并且从未在Outlook中使用过VBA。

Option Explicit

Private WithEvents olInboxItems As Items

Private Sub Application_Startup()
  Dim objNS As NameSpace
  Set objNS = Application.Session
  Set olInboxItems = objNS.GetDefaultFolder(olFolderInbox).Folders("reports").Items
  Set objNS = Nothing
End Sub

Private Sub olInboxItems_ItemAdd(ByVal Item As Object)

If Item.Attachments.Count > 0 Then

    ….

End Sub

问题:

Private WithEvents olInboxItems As Items-是什么Private WithEvents意思?我知道VBA中的事件,例如打开工作簿,但我不知道这行的含义。

NameSpace:简单地说,什么是NameSpace?我读到的是,与Excel相比,Outlook中的对象模型具有不同的结构,名称空间仅位于应用程序级别之下。如果是正确的话,那么我猜这对我来说已经足够了,但是如果有人有一个简洁的解释,我将不胜感激。

Set objNS = Nothing怎么会

查看更多

提问者
Alex
被浏览
52
0m3r 2020-02-01 05:26

私有WithEvents olInboxItems作为项-私有WithEvents是什么意思或做什么?

WithEvents指定一个或多个声明的成员变量引用可以引发事件的类的实例。

要在Microsoft Visual Basic中为Microsoft Outlook对象创建事件处理程序,请参见

在自动化MSDN中使用事件

使用Outlook Visual Basic for Applications响应Outlook事件MSDN

NameSpace:简单来说,什么是NameSpace?

NameSpace对象(Outlook),它代表任何数据源的抽象根对象,并直接访问存储对象。

NameSpace对象(Outlook)MSDN

好的代码示例

Option Explicit
Private WithEvents Items As Outlook.Items

Private Sub Application_Startup()
    Dim olNs As Outlook.NameSpace
    Set olNs = Application.GetNamespace("MAPI")

    Dim Inbox  As Outlook.MAPIFolder
    Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
    Set Items = Inbox.Items

End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
    If TypeOf Item Is Outlook.MailItem Then
        DoEvents
        '' call another sub
    End If
End Sub

将对象设置为空-https: //stackoverflow.com/a/517202/4539709