生成VBA宏时出现运行时错误“424”

生成VBA宏时出现运行时错误“424”,vba,outlook,Vba,Outlook,关于这一点,这里有很多问题已经得到了回答,但我没有找到任何与我的情况相关的问题。由于我是VBA新手,我确信这是我所缺少的一些简单的东西。我甚至在这里运行了这些步骤,以确保在我的情况下可以访问DAO 3.6: 有人能帮我找出下面我的VBA脚本出了什么问题吗 当一封邮件进入我的收件箱时,我正试图从邮件的主题行中删除一堆无用的文本。请注意,具有此主题的项目将放置在“我的收件箱”中的各个子文件夹中,以防出现以下情况: Sub ChangeSubject() If Left(Item.subject,

关于这一点,这里有很多问题已经得到了回答,但我没有找到任何与我的情况相关的问题。由于我是VBA新手,我确信这是我所缺少的一些简单的东西。我甚至在这里运行了这些步骤,以确保在我的情况下可以访问DAO 3.6:

有人能帮我找出下面我的VBA脚本出了什么问题吗

当一封邮件进入我的收件箱时,我正试图从邮件的主题行中删除一堆无用的文本。请注意,具有此主题的项目将放置在“我的收件箱”中的各个子文件夹中,以防出现以下情况:

Sub ChangeSubject()

If Left(Item.subject, 31) = "Your Work Item Changed: " Then
Item.subject = Right(Item.subject, Len(Item.subject - 31))
End If

End Sub

尝试从VBA编辑器运行此操作将导致运行时错误“424”消息。请注意,我现在使用的是Windows上的Outlook 2013。

这里的代码用于查看我正在引用的新项目

Private Sub Items_ItemAdd(ByVal Item As Object)

      On Error GoTo ErrorHandler
      Dim Msg As Outlook.MailItem
      Dim emailSubject As String

      If TypeOf Item Is MailItem Then
          Set Msg = Item
          emailSubject = Msg.Subject
          'put additional code here
      End If

ErrorHandler:
  MsgBox Err.Number & " - " & Err.Description
End Sub

*根据GSerg的评论编辑邮件项目检查。

不清楚Outlook中用于处理新邮件项目的事件。无论如何,我可以建议以下方法来完成这项工作:

在Outlook中创建一个规则,该规则可以运行VBA宏,您可以在其中更改主题行。无需以编程方式检查每个传入邮件项。只有当收到的电子邮件满足您的条件时,才会调用VBA宏。宏子对象应如下所示:

public sub text(mail as MailItem)
  ' do whatever you need
end sub
其中,mail对象表示传入的电子邮件

处理应用程序类的事件,该事件在收件箱中收到新项目时触发。NewMailEx事件在新邮件到达收件箱时以及在客户端规则处理发生之前激发。您可以使用EntryIDCollection数组中返回的条目ID调用NameSpace.GetItemFromID方法并处理该项。请谨慎使用此方法,以尽量减少对Outlook性能的影响。但是,根据客户端计算机上的设置,在新邮件到达收件箱后,垃圾邮件过滤和将新邮件从收件箱移动到另一个文件夹的客户端规则等过程可能会异步进行。您不应该假设在这些事件触发后,收件箱中的项目数始终会增加一个项目


ItemAdd也可以使用。但是,如果同时添加多个项目超过16个,则不会触发

将Option Explicit作为代码模块的第一行,修复所有错误,然后查看剩下的内容。GSerg也可能提到的问题是,它不知道该项是什么。您需要将该项作为参数传递给子项,或者从某处获取它。你可以找到一个代码,每当收到一封电子邮件时,它都会成为一个事件,但现在不是,然后你可以使用该代码访问该项目。你的工作项目更改的文本:是24个字符长,因此不清楚为什么要将其与主题的前31个字符进行比较。我意识到,一旦我发布了此代码,它就会成为一个事件。实际的文本是不同的,但我不得不对它进行一些模糊处理MailItem@GSerg我猜你的代码的重点是速度优化,如果你拼写错误,编译器会告诉你,如果有人传递了一个名为MailItem的自定义对象,而该对象与Outlook的MailItem无关,则不会给出假阳性。再想一想,如果您的目标是使用后期绑定,否则为什么要作为对象?,那么您应该保留TypeName.was不尝试使用后期绑定。我不知道这种声明的类型,对它的好处很好奇。我同意这样更好,所以我更新了答案。谢谢如果同时添加多个项目,则不会触发ItemAdd事件。此外,原始帖子包含以下文本:请注意,具有此主题的项目将放在我收件箱中的各个子文件夹中,以防出现问题:。因此,您需要订阅每个子文件夹才能触发事件。