我正在尝试编写一个宏,以自动保存在工作中通过电子邮件获得的某些报告。另一个部门的位置非常相似,因此我可以重用他们的许多代码。但是,他们无法真正向我解释代码某些部分的功能,并且对其进行谷歌搜索并不是特别有用。
如果有帮助,我将发布整个代码,我将其遗漏了,因为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
怎么会
私有WithEvents olInboxItems作为项-私有WithEvents是什么意思或做什么?
WithEvents指定一个或多个声明的成员变量引用可以引发事件的类的实例。
要在Microsoft Visual Basic中为Microsoft Outlook对象创建事件处理程序,请参见
使用Outlook Visual Basic for Applications响应Outlook事件MSDN
NameSpace:简单来说,什么是NameSpace?
NameSpace对象(Outlook),它代表任何数据源的抽象根对象,并直接访问存储对象。
好的代码示例
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