VBA添加Outlook邮件附件时空格被替换为%20的问题
问题描述
我使用以下VBA代码保存Excel文件并添加为Outlook邮件附件:
ActiveWorkbook.SaveAs filename:="CLIENT NAME - OUR NAME- Statement of Account as of " & Format(Now(), "MM-DD-YY") & ".xlsx" Dim OutlookApp As Object Dim OutlookMessage As Object Set OutlookApp = CreateObject("Outlook.Application") Set OutlookMessage = OutlookApp.CreateItem(0) With OutlookMessage .To = " CLIENT EMAIL " .CC = " MY EMAIL " .Subject = "CLIENT NAME - OUR NAME - Statement of Account" .Body = "Dear Valued Client," & vbNewLine & vbNewLine & "Attached is your weekly statement of account." & vbNewLine & vbNewLine & "Please let us know if you have any questions" & vbNewLine & vbNewLine & "Thank you," & vbNewLine & "Accounts Receivable Team" .Attachments.Add ActiveWorkbook.FullName .Display End With Set OutlookMessage = Nothing Set OutlookApp = Nothing
文件保存后文件名中的空格显示正常,但通过代码添加到邮件附件后,空格被替换为%20;手动添加该文件到邮件时,文件名显示正常。请问如何解决此问题?
解决方案
这个问题的根源是ActiveWorkbook.FullName返回的是URL编码后的文件路径,其中空格会被转成%20,Outlook读取这个编码路径时会直接保留编码字符。以下两种方法可以解决:
方法1:拼接原始文件路径和名称
替换代码中添加附件的那一行,改用ActiveWorkbook.Path(文件所在路径)和ActiveWorkbook.Name(原始文件名)拼接:
.Attachments.Add ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
这种方式直接获取未编码的原始路径和文件名,从根源避免URL编码问题,是最可靠的解决方案。
方法2:解码路径中的%20
如果需要保留使用FullName的逻辑,可以用Replace函数将编码后的%20替换回空格:
.Attachments.Add Replace(ActiveWorkbook.FullName, "%20", " ")
不过这种方法仅针对空格的编码情况,通用性不如第一种方法。
内容的提问来源于stack exchange,提问作者linzomania
相关产品推荐
相关产品推荐

