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

升级Office365后VBA发送的xlsm附件提示格式无效如何解决

可行修复方案
  • 调整文件保存逻辑,显式指定文件格式,避免Office365默认格式和扩展名不匹配
    原来的SaveCopyAs逻辑没有指定格式,Office365会根据当前默认配置生成文件,很容易出现实际格式和你指定的.xlsm扩展名不符的问题,替换为以下代码:
' 替换原来的DestinWB.SaveCopyAs那一行
' 显式指定为启用宏的工作簿格式,值为52,对应xlOpenXMLWorkbookMacroEnabled
If FileExtStr = ".xlsm" Then
    DestinWB.SaveAs Filename:=TempFilePath & TempFileName & FileExtStr, FileFormat:=52
Else
    ' 对应普通无宏xlsx格式,值为51
    DestinWB.SaveAs Filename:=TempFilePath & TempFileName & FileExtStr, FileFormat:=51
End If
  • 修复附件删除时机的问题,避免Outlook还未加载完附件就删除临时文件
    你现有代码.Display之后立刻执行删除临时文件的操作,Office365版本的Outlook加载附件速度比旧版慢,经常出现还没读完临时文件就被删除,导致附件损坏。在.Display之后加1~2秒的延迟即可:
With OutlookMessage
    ' 其他原有配置不变
    .Display
    Application.Wait Now + TimeValue("0:00:02") ' 新增2秒延迟,给Outlook加载附件的时间
End With
  • 补充外部链接为空的判断,避免空数组遍历导致的文件异常
    现有代码中如果DestinWB没有外部链接,ExternalLinks会返回空值,直接调用UBound会报错,虽然有On Error Resume Next跳过,但可能导致文件保存时出现隐性损坏,修改为以下逻辑:
ExternalLinks = DestinWB.LinkSources(Type:=xlLinkTypeExcelLinks)
If Not IsEmpty(ExternalLinks) Then ' 新增判断,只有存在外部链接时才遍历
    For x = 1 To UBound(ExternalLinks)
        DestinWB.BreakLink Name:=ExternalLinks(x), Type:=xlLinkTypeExcelLinks
    Next x
End If
  • 固定扩展名判断逻辑,避免源文件状态带来的误差
    如果你的附件固定需要是启用宏的工作簿,可以直接替换原来的扩展名判断代码,避免源文件未保存、扩展名识别错误的问题:
' 替换原来的Determine File Extension部分的代码
FileExtStr = ".xlsm"
  • 验证工作表复制逻辑的正确性
    你现有代码只选中了Sheet5进行复制,如果需要复制的是Report工作表,确认Sheet5的CodeName是否对应Report表,避免复制了空表或者错误的表导致生成的文件异常。

内容的提问来源于stack exchange,提问作者Owen4512

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:24:02