Vba Outlook宏间歇性权限错误

Vba Outlook宏间歇性权限错误,vba,email,outlook,Vba,Email,Outlook,我对VBA一无所知,我设法拼凑了一个非常简单的宏,它允许我通过规则保存为电子邮件: Sub sTXT(myMail As Outlook.MailItem) strname = myMail.Subject myMail.SaveAs "C:\Users\ss127w\Box Sync\maildump\" & strname & ".txt", OLTXT End Sub Sub Test() Call sTXT(ActiveExplorer.Selection(1

我对VBA一无所知,我设法拼凑了一个非常简单的宏,它允许我通过规则保存为电子邮件:

Sub sTXT(myMail As Outlook.MailItem)
 strname = myMail.Subject
 myMail.SaveAs "C:\Users\ss127w\Box Sync\maildump\" & strname & ".txt", OLTXT
End Sub
Sub Test()
    Call sTXT(ActiveExplorer.Selection(1))
End Sub
这已经完美地工作了好几个月了,我已经导出了相同的两种类型的电子邮件,没有问题。今天我尝试为不同的电子邮件设置一个新规则,但这个宏给了我一个权限错误:

Outlook cannot complete the save due to a file permission error.
我没有对宏进行任何更改。我开始在随机的其他电子邮件上测试宏,并注意到它对某些邮件有效,而对其他邮件无效

现在,如果我手动执行SaveAs,我可以将任何电子邮件保存到宏中定义的文件夹中

我怀疑主题行中的特殊字符引起了问题,但我还没有做足够的尝试和错误来真正得出结论(主题行中有一个冒号(:)

让我知道你的想法

我怀疑主题行中的特殊字符引起了问题,但我还没有做足够的尝试和错误来真正得出结论(主题行中有一个冒号(:)

您是对的-冒号将导致问题

如果尝试使用Windows资源管理器编辑包含冒号的文件名,您将收到以下消息:

文件名不能包含以下任何字符:\/:*?“<>|

最好是将主题中的任何此类字符转换为其他字符,例如,而不是

strname = myMail.Subject
你可以用

strname = Replace(myMail.Subject, ":", "_")
将任何冒号改为下划线

或者你可以全力以赴

strname = Replace( _
          Replace( _
          Replace( _
          Replace( _
          Replace( _
          Replace( _
          Replace( _
          Replace( _
          Replace(myMail.Subject, "\", "_"), _
                                  "/", "_"), _
                                  ":", "_"), _
                                  "*", "_"), _
                                  "?", "_"), _
                                  """", "_"), _
                                  "<", "_"), _
                                  ">", "_"), _
                                  "|", "_")
strname=替换(_
取代(_
取代(_
取代(_
取代(_
取代(_
取代(_
取代(_
替换(myMail.Subject,“\”,“\”_
"/", "_"), _
":", "_"), _
"*", "_"), _
"?", "_"), _
"""", "_"), _
"", "_"), _
"|", "_")
如果你想。显然,替换字符的选择取决于你——如果你只是想去掉字符,你甚至可以用
替换它们