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

VBA编译错误‘named argument not found’:XLSM转XLSX保存报错

解决SaveCopyAs保存XLSM为XLSX时的“named argument not found”错误

问题原因

SaveCopyAs方法仅用于创建原文件的副本,不支持FileFormat参数——这就是触发“named argument not found”编译错误的核心原因。该方法会完全保留原文件的格式,无法直接转换为其他格式。

解决方案

要将XLSM文件另存为XLSX格式,需使用SaveAs方法(支持指定文件格式参数)。根据需求分两种场景处理:

场景1:直接将当前工作簿转换为XLSX(原XLSM文件会被替换为新的XLSX文件)

修改后的代码如下:

Sub SaveExistingWorkbook()
    Dim savePath As String
    Application.DisplayAlerts = False
    ' 构建带日期的保存路径
    savePath = "C:\Users\Public\Documents\Report Tracker\" & Format(Now(), "yyyy-MM-dd") & ".xlsx"
    ' 使用SaveAs指定XLSX格式
    ThisWorkbook.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbook
    Application.DisplayAlerts = True
End Sub

场景2:保留原XLSM文件不变,另存为新的XLSX文件

如果不想修改原工作簿,可先复制副本再转换格式:

Sub SaveAsXlsxWithoutChangingOriginal()
    Dim savePath As String
    Dim tempWb As Workbook
    
    Application.DisplayAlerts = False
    savePath = "C:\Users\Public\Documents\Report Tracker\" & Format(Now(), "yyyy-MM-dd") & ".xlsx"
    
    ' 先创建原文件的XLSM副本
    ThisWorkbook.SaveCopyAs Filename:=savePath
    ' 打开副本并转存为XLSX
    Set tempWb = Workbooks.Open(savePath)
    tempWb.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbook
    tempWb.Close SaveChanges:=False
    
    Application.DisplayAlerts = True
End Sub

关键说明

  • xlOpenXMLWorkbook是Excel内置常量,对应XLSX格式(数值为51),确保参数拼写正确
  • Application.DisplayAlerts = False用于自动覆盖已存在的同名文件,无需手动确认

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:35:04