XLSM文件转换为同名XLSX格式的VBA代码问题咨询
问题原因
- 原代码使用的
ExportAsFixedFormat方法是专门用于导出PDF/XPS这类固定格式文件的,不支持导出XLSX格式,xlTypeXlsx也不是该方法的合法参数 - 按
.分割文件路径的写法存在风险:如果文件路径或名称本身包含.,分割后取PathArray(0)会丢失部分路径内容 - 原逻辑是导出当前工作表,而转换工作簿格式需要保存整个工作簿而非单个工作表
修正后的代码
Sub xlsmtoxlsx() Dim PathFile As String Dim SavePath As String Dim FileExtPos As Long ' 获取当前工作簿完整路径 PathFile = ThisWorkbook.FullName ' 定位路径中最后一个点的位置,规避路径/名称带点的异常问题 FileExtPos = InStrRev(PathFile, ".") ' 生成新的保存路径,仅替换后缀为xlsx SavePath = Left(PathFile, FileExtPos - 1) & ".xlsx" ' 另存为无宏xlsx格式,xlOpenXMLWorkbook对应xlsx格式的编码为51 ThisWorkbook.SaveAs Filename:=SavePath, FileFormat:=xlOpenXMLWorkbook ' 标记原工作簿为已保存避免弹出提示,退出Excel ThisWorkbook.Saved = True Application.Quit End Sub
注意事项
- 执行前请确保原XLSM文件已经手动保存过,否则
ThisWorkbook.FullName无法获取到正确的本地路径 - 转换后的XLSX文件会自动剔除原XLSM中的所有宏代码,符合XLSX格式的规范要求
- 如果不需要转换后自动关闭Excel,可删除最后两行的
ThisWorkbook.Saved = True和Application.Quit代码
内容的提问来源于stack exchange,提问作者MmVv
相关产品推荐
相关产品推荐

