outlook vba-将电子邮件移动到文件夹,需要对象

outlook vba-将电子邮件移动到文件夹,需要对象,vba,outlook,Vba,Outlook,我正在尝试写一些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

我正在尝试写一些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-需要对象”


非常感谢任何想法。

myInbox
应用程序启动的局部变量。因此,它只能在
应用程序启动时访问

我强烈建议在模块顶部添加
选项Explicit On
。这将提醒您此类错误(以及其他错误)

来解决你的问题

  • myItems\u ItemAdd
    方法中再次发现
    myInbox
    (您可能希望将应用程序启动代码提取到该方法中)或

  • 在方法之外声明
    myInbox
    (就像
    myItems
    )以使其全局可访问。请注意,这种“全局变量”应该谨慎使用,并且只有在真正必要时才使用


很有魅力!谢谢Heinzi,注意到选项明确,非常感谢。