将邮件保存到本地磁盘时出现运行时错误

时间:2019-11-18 11:12:02

标签: vba for-loop outlook runtime-error

我创建了一个宏来备份选择的邮件。

我将宏附加到功能区上。这适用于一封邮件,但是当我在同一Outlook会话中选择另一封邮件时,出现以下错误:

  

执行期间发生错误-2147286788(800300fc):操作失败。

这是我的代码:

Public Sub OpslaanMails()
    Dim oMail As Outlook.MailItem
    Dim objItem As Object
    Dim sPath As String
    Dim dtDate As Date
    Dim sName, sTime As String
    sPath = "A:\Backup\"
    For Each objItem In ActiveExplorer.Selection
        If objItem.MessageClass = "IPM.Note" Then
            Set oMail = objItem
            sName = oMail.SenderName
            sTime = oMail.ReceivedTime
            dtDate = oMail.ReceivedTime
            sName = sName & " " & Format(dtDate, "dd-mm-yyyy", vbUseSystemDayOfWeek, _
              vbUseSystem) & "   " & Format(dtDate, "hh-nn-ss", _
              vbUseSystemDayOfWeek, vbUseSystem)
            tName = Replace(sName, ":", ";")
            oMail.SaveAs sPath & tName & ".msg", olMsg
        End If
    Next
End Sub

当我使用sName = oMail.Subject时,我可以选择任意数量的邮件,并且可以使用,但不能与oMail.SenderName一起使用。

当我点击Debug时,它失败了:oMail.SaveAs sPath & tName & ".msg", olMsg

我评论了tName = Replace(sName, ":", ";")

并更改

oMail.SaveAs sPath & tName & ".msg", olMsg

Mail.SaveAs sPath & sName & ".msg", olMsg

但这不起作用。

我尝试声明oMail as Object,但这并没有任何改变。添加多个替换来处理不允许的字符也是行不通的。

2 个答案:

答案 0 :(得分:0)

错误为STG_E_INVALIDNAME,表示您传递给SaveAs的文件名无效。

答案 1 :(得分:0)

我想我解决了。我将function scramble(str1, str2) { str1 = [...str1]; return [...str2].filter((str => (str == str1.splice(str1.indexOf(str), 1)))).join('') == str2; } 更改为sName = oMail.SenderName,并删除了每个Replace函数。瞧,现在可以了!