【问题标题】:outlook vba - move email to folder, object requiredOutlook vba - 将电子邮件移动到文件夹,需要对象
【发布时间】:2015-09-16 20:22:19
【问题描述】:

我正在尝试编写一些 vba,它将在收到电子邮件时将其移动到某个文件夹中。

到目前为止,代码是:

Private WithEvents myItems as Outlook.Items
Public Sub Application_Startup()
    Dim myApp as Outlook.Application
    Dim myNameSpace as Outlook.NameSpace
    Dim myInbox as Outlook.Folder

    Set myApp = Outlook.Application
    Set myNameSpace = myApp.GetNamespace("MAPI")
    Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
    Set myItems = myInbox.Items
End Sub

Private Sub myItems_ItemAdd(ByVal item as Object)
    Dim msg as Outlook.MailItem
    Dim recips as String
    Dim destFolder as Outlook.Folder

    Set destFolder = myInbox.Folders("Test")
    Set msg = item
    recips = msg.To
    If InStr(recips, "m0atz") Then
          msg.Move destFolder
    End If

    Set msg = nothing
    Set destFolder = nothing
End Sub

我遇到的问题是从该行收到电子邮件时出现错误:

Set destFolder = myInbox.Folders("Test")

说“运行时错误 424 - 需要对象”

非常感谢任何想法。

【问题讨论】:

    标签: vba outlook


    【解决方案1】:

    myInboxApplication_Startup 的局部变量。因此,它只能在Application_Startup 中访问。

    强烈建议将Option Explicit On 添加到模块顶部。这将提醒您此类错误(和其他错误)。

    为了解决你的问题,要么

    • 在您的 myItems_ItemAdd 方法中再次发现 myInbox(您可能希望将 Application_Startup 代码提取到一个方法中)或

    • 在你的方法之外声明myInbox(就像myItems一样)以使其全局可访问。请注意,此类“全局变量”应谨慎使用,并且仅在确实需要时使用。

    【讨论】:

    • 很有魅力!感谢 Heinzi,注意选项显式,非常感谢。