You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:02:12