Outlook宏间歇性权限错误

时间:2017-09-07 02:18:23

标签: vba email outlook outlook-vba

我对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,我可以将任何电子邮件保存到宏中定义的文件夹中。

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

让我知道你的想法。

1 个答案:

答案 0 :(得分:1)

  

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

你是对的 - 冒号会引起问题。

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

  

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

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

strname = myMail.Subject

你可以使用

strname = Replace(myMail.Subject, ":", "_")

将任何冒号改为下划线。

或者你可以选择完整的

strname = Replace( _
          Replace( _
          Replace( _
          Replace( _
          Replace( _
          Replace( _
          Replace( _
          Replace( _
          Replace(myMail.Subject, "\", "_"), _
                                  "/", "_"), _
                                  ":", "_"), _
                                  "*", "_"), _
                                  "?", "_"), _
                                  """", "_"), _
                                  "<", "_"), _
                                  ">", "_"), _
                                  "|", "_")

如果你愿意的话。显然,替换角色的选择取决于你 - 如果你只想摆脱角色,你甚至可以用""替换它们。