【问题标题】:Update all mail in inbox to remove certain text Runtime Error 430 VBS更新收件箱中的所有邮件以删除某些文本 Runtime Error 430 VBS
【发布时间】:2016-10-29 07:41:50
【问题描述】:

我最近一直收到此错误,我不知道缺少什么?它曾经工作过。调试器在 myStr = objItem.htmlbody 处停止并给出运行时错误 430(类不支持自动化或不支持预期的接口)

Sub UpdateAllMessages()
' Remove the appended url from all effected urls
' Start execution here
Dim olkSto As Outlook.Store
For Each olkSto In Session.Stores
    ProcessFolder olkSto.GetRootFolder()
Next
MsgBox "All hyperlinks are back to their original state.", vbInformation, "Success"
End Sub

Sub ProcessFolder(olkFld As Outlook.MAPIFolder)
    Dim objItem As Object, olkSub As Outlook.MAPIFolder
    Dim objMail As MailItem

Dim myStr As String

'Process each message
For Each objItem In olkFld.Items
    'Only  messages, not receipts or appointment requests, etc.
    If objItem.Class = olMail Then
        ' Store the HTML Bodyin a variable
        myStr = objItem.htmlbody <<<<<<<<<<<<<<<<<<<<<<< DEBUG STOPS HERE ERROR
        ' Update all URLs
        myStr = Replace(myStr, "https://test.com/apps/verify/?url=", "", , , vbTextCompare)
        ' only if there is a change
        ' Assign back to HTML Body
        If Len(myStr) <> Len(objItem.htmlbody) Then
            objItem.htmlbody = myStr
            ' Save the mail
            objItem.Save
        End If
    End If
Next
Set olkMsg = Nothing
For Each olkSub In olkFld.Folders
    ProcessFolder olkSub
Next
Set olkSub = Nothing

End Sub

【问题讨论】:

  • 您的标题显示“收件箱”,那么您为什么要搜索系统上每个 PST 和 OST 文件中的每个文件夹和子文件夹?
  • 当我将您的代码复制到我系统上的 Outlook 模块时,myStr = objItem.htmlbody &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; DEBUG STOPS HERE ERROR 给出了错误。当我添加引用以使尾部成为评论时,我得到myStr = objItem.HTMLBody '&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; DEBUG STOPS HERE ERROR。也就是说,htmlbody 按预期自动更正为HTMLBody。你是如何设法在你的系统上获得htmlbody
  • 。我的猜测是,在某个不起眼的文件夹中,您有一些看起来像邮件但不是的东西。哪个文件夹包含给出错误的邮件项?
  • 嗨,Tony,我在此处添加了“
  • 这让我的猜测更有可能。在工作中,您将拥有诸如 RSS 提要和日记之类的文件夹。自从我尝试以来已经有好几年了,但我记得访问这些文件夹会出现奇怪的错误。发生错误时您访问的是哪个文件夹?

标签: vba vbscript outlook macros


【解决方案1】:

我对不喜欢的文件夹的粗略解决方案是简单的Select Case

Select Case olkFld.Name
  Case "RSS Feeds", "Journal", "Search Folders", "Draft"
    ' Ignore
  Case Else
    ' Process folder that might contain something interesting
    : :
    : :
End Select

替代建议

您的代码在我的系统上没有出现错误,因此我无法测试此代码,但它可能会有所帮助。下面关闭问题陈述的标准错误处理程序。

Dim ErrNum As Long
Err.Clear
On Error Resume Next
myStr = objItem.HTMLBody   '<<<<<<<<<<<<<<<<<<<<<<< DEBUG STOPS HERE ERROR
ErrNum = Err.Number
On Error GoTo 0
If ErrNum = 0 Then
  ' Update all URLs
  myStr = Replace(myStr, "https://test.com/apps/verify/?url=", "", , , vbTextCompare)
  ' only if there is a change
  ' Assign back to HTML Body
  If Len(myStr) <> Len(objItem.HTMLBody) Then
      objItem.HTMLBody = myStr
      ' Save the mail
      objItem.Save
  End If
End If

【讨论】:

  • For Each objItem In olkFld.ItemsNext。也就是说,围绕处理可能包含有趣内容的文件夹的代码。
  • 好吧,明天上班测试。但我才意识到我家里也有 RSS 源,所以不确定是不是这个原因。明天告诉你。非常感谢托尼!
  • 没有工作:(它立即停止在我的帖子中描述的行,甚至没有到达代码的末尾
  • user3454329。停止时它在哪个文件夹中?你对这个项目了解多少?根据您的描述objItem 没有属性HtmlBody。鉴于您已经检查过objItem.Class,这应该是不可能的,但显然是这样。
  • user3454329。我在答案中添加了替代建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 2023-03-23
相关资源
最近更新 更多