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

问题描述 投票:0回答:1

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

[如果有帮助,我将发布整个代码,我将其遗漏了,因为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:简而言之,什么是命名空间?我读到的是,与Excel相比,Outlook中对象模型的结构不同,名称空间仅在应用程序级别以下。如果是正确的话,那么我猜这对我来说已经足够了,但是如果有人有一个简洁的解释,我将不胜感激。

你为什么要Set objNS = Nothing

vba outlook outlook-vba
1个回答
0
投票

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

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

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

Using Events with Automation MSDN

Using Outlook Visual Basic for Applications to Respond to Outlook Events MSDN

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

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

NameSpace object (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

© www.soinside.com 2019 - 2024. All rights reserved.