Excel VBA添加SharePoint附件时文件名空格变%20的问题求助
问题说明
存储在SharePoint上的Excel文件,通过VBA宏添加为Outlook邮件附件时,文件名中的空格会被替换为%20(例如Old Dates.xlsx变成Old%20Dates.xlsx),导致收件人收到的附件名称异常。尝试使用FullNameURLEncoded替代FullName,问题未解决。
解决方法
方案1:使用本地同步路径(优先推荐)
如果文件已同步到本地OneDrive/SharePoint同步文件夹,直接用ActiveWorkbook.FullName作为附件路径即可——此时返回的是本地文件路径,不会出现URL编码问题:
- 确保文件完成本地同步,避免路径无效;
- 替换代码中
.Attachments.Add的参数为ActiveWorkbook.FullName。
方案2:解码URL并自定义附件显示名
若无法使用本地路径,可手动解码URL路径,并强制设置附件的显示名称:
- 用
Replace函数将%20替换回空格,还原原始路径; - 添加附件后,通过
Attachment.DisplayName属性指定为原始文件名。
修改后的VBA代码
Dim EmailApp As Outlook.Application Dim EmailItem As Outlook.MailItem Dim fileName As String Dim decodedFilePath As String Dim att As Attachment Set EmailApp = New Outlook.Application Set EmailItem = EmailApp.CreateItem(olMailItem) ' 获取原始文件名和解码后的文件路径 fileName = ActiveWorkbook.Name decodedFilePath = Replace(ActiveWorkbook.FullNameURLEncoded, "%20", " ") With EmailItem .To = "michelle@myemail.com" .SentOnBehalfOfName = "holley@myemail.com" .CC = "" .BCC = "" .Subject = "Dates" .HTMLBody = "Here is this quarters file." & vbNewLine & vbNewLine & vbNewLine ' 添加附件并指定显示名称 Set att = .Attachments.Add(decodedFilePath) att.DisplayName = fileName .Display ActiveWorkbook.Close End With ' 释放对象资源 Set att = Nothing Set EmailItem = Nothing Set EmailApp = Nothing
内容的提问来源于stack exchange,提问作者holley
相关产品推荐
相关产品推荐

