Matlab 使用worksheet.saveas保存Excel文件时出错

Matlab 使用worksheet.saveas保存Excel文件时出错,matlab,excel,vba,Matlab,Excel,Vba,我有一个Excel模板文件。基于Excel版本,我希望通过Matlab将其另存为Temp.xlsm 以下是我用来保存模板文件的代码: if(XLversion >= 12.0) Workbook = invoke(Excel.Workbooks,'Open',tempxls); tempxls1 = [pwd '\utils\temp.xlsm']; Workbook.SaveAs(tempxls1,1); tempxls = tempxls1; e

我有一个Excel模板文件。基于Excel版本,我希望通过Matlab将其另存为Temp.xlsm

以下是我用来保存模板文件的代码:

if(XLversion >= 12.0)
    Workbook = invoke(Excel.Workbooks,'Open',tempxls);
    tempxls1 = [pwd '\utils\temp.xlsm'];
    Workbook.SaveAs(tempxls1,1);
    tempxls = tempxls1;
    extn = 'xlsm';
end
代码运行良好。但是,当我尝试打开该文件时,出现以下错误:

但是,当通过“另存为”菜单将temp.xls保存到temp.xlsm时,它将打开,不会出现任何错误

你知道代码中可能有什么错误,或者我是否遗漏了什么吗


谢谢

请尝试以下代码并发表评论。您可以调用此
子程序
,将保存为文件

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim FileNameVal As String
If SaveAsUI Then
    FileNameVal = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
    Cancel = True
    If FileNameVal = "False" Then 'User pressed cancel
        Exit Sub
    End If
    Application.EnableEvents = False
        If Right(ThisWorkbook.Name, 5) <> ".xlsm" Then
            ThisWorkbook.SaveAs Filename:=FileNameVal & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
        Else
            ThisWorkbook.SaveAs Filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled
        End If
    Application.EnableEvents = True
End If
End Sub
Private子工作簿\u保存前(ByVal SaveAsUI为布尔值,Cancel为布尔值)
Dim FileNameVal作为字符串
如果是SaveAsUI那么
FileNameVal=Application.GetSaveAsFilename(,“启用Excel宏的工作簿(*.xlsm),*.xlsm”)
取消=真
如果FileNameVal=“False”,则“用户按了取消”
出口接头
如果结束
Application.EnableEvents=False
如果正确(ThisWorkbook.Name,5)“.xlsm”,则
ThisWorkbook.SaveAs文件名:=FileNameVal&“.xlsm”,文件格式:=xlOpenXMLWorkbookMacroEnabled
其他的
ThisWorkbook.SaveAs文件名:=FileNameVal,文件格式:=xlOpenXMLWorkbookMacroEnabled
如果结束
Application.EnableEvents=True
如果结束
端接头

请尝试以下代码并发表评论。您可以调用此
子程序
,将保存为文件

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim FileNameVal As String
If SaveAsUI Then
    FileNameVal = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
    Cancel = True
    If FileNameVal = "False" Then 'User pressed cancel
        Exit Sub
    End If
    Application.EnableEvents = False
        If Right(ThisWorkbook.Name, 5) <> ".xlsm" Then
            ThisWorkbook.SaveAs Filename:=FileNameVal & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
        Else
            ThisWorkbook.SaveAs Filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled
        End If
    Application.EnableEvents = True
End If
End Sub
Private子工作簿\u保存前(ByVal SaveAsUI为布尔值,Cancel为布尔值)
Dim FileNameVal作为字符串
如果是SaveAsUI那么
FileNameVal=Application.GetSaveAsFilename(,“启用Excel宏的工作簿(*.xlsm),*.xlsm”)
取消=真
如果FileNameVal=“False”,则“用户按了取消”
出口接头
如果结束
Application.EnableEvents=False
如果正确(ThisWorkbook.Name,5)“.xlsm”,则
ThisWorkbook.SaveAs文件名:=FileNameVal&“.xlsm”,文件格式:=xlOpenXMLWorkbookMacroEnabled
其他的
ThisWorkbook.SaveAs文件名:=FileNameVal,文件格式:=xlOpenXMLWorkbookMacroEnabled
如果结束
Application.EnableEvents=True
如果结束
端接头

.xlsm
s启用宏的格式。为什么不试试
.xls
.xlsx并试着打开它呢?office 2007之后,office文档的内部结构发生了变化。因此Excel依赖于
extention`来了解文件应该如何打开。。。。你的Excel版本是什么?是的,我需要一个.xlsm格式,因为我已经在模板文件中编写了许多宏。MATLAB的
tag在这里做什么?:)您使用的Excel版本是什么?在saveas中使用52作为第二个参数。。。我相信这将解决问题
52=xlOpenXMLWorkbookMacroEnabled=xlsm
:)
.xlsm
s宏启用格式。为什么不试试
.xls
.xlsx并试着打开它呢?office 2007之后,office文档的内部结构发生了变化。因此Excel依赖于
extention`来了解文件应该如何打开。。。。你的Excel版本是什么?是的,我需要一个.xlsm格式,因为我已经在模板文件中编写了许多宏。MATLAB的
tag在这里做什么?:)您使用的Excel版本是什么?在saveas中使用52作为第二个参数。。。我相信这将解决这个问题(非常感谢您的时间。然而,我在Matlab中寻找一个解决方案。很高兴你能解决这个问题,更感谢Daniel:)在我发布的代码中,如果你希望有一天从VBA中查看它,
52
文件格式已经指定。非常感谢你花时间。不过,我在Matlab中寻找一个解决方案。很高兴你能解决这个问题,还要感谢Daniel:)在我发布的代码中,如果你希望有一天从VBA中查看它,
52
文件格式已经指定。