我正在尝试编写宏以自动保存我们在工作中通过电子邮件获得的某些报告。另一个部门的位置非常相似,因此我可以重用他们的许多代码。但是,他们无法真正向我解释代码某些部分的功能,并且对其进行谷歌搜索并不是特别有用。
[如果有帮助,我将发布整个代码,我将其遗漏了,因为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
?
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