错误:重新打开包含嵌入式 VBA 代码的 xlsm 文件时"Excel cannot open the file 'xxx.xlsm' because the file format is not



我的 excel 工作表上有一个按钮,上面有下面的嵌入式代码。基本上,我正在尝试将工作表与嵌入式代码一起复制,因为工作表将被部分提交、关闭、重新打开,然后完全提交。

如果我不关闭活动工作簿,则保存检查功能在部分提交函数中完美运行,但是如果我关闭活动工作簿 (ActiveWorkbook.Close(,然后重新打开它,则在标题中出现错误 (错误:"Excel 无法打开文件'xxx.xlsm',因为文件格式或文件扩展名无效。验证文件是否未损坏,以及文件扩展名是否与文件格式匹配。我想知道在关闭代码之前是否需要在代码中的任何位置启用宏,以便在尝试重新打开时它不会出现故障。

如果我没有在Partially_Submit函数中关闭工作簿,则 FullSubmit 函数可以保存副本并删除旧文件。如果我将副本另存为.xls,则可以在兼容模式下关闭并重新打开它。如果我将文件另存为任何其他文件(.xlsx或.xlsm(,则会收到相同的错误("Excel无法打开文件'xxx.xlsm',因为文件格式或文件扩展名无效。验证文件是否未损坏,以及文件扩展名是否与文件格式匹配。

Sub Partially_Submit()
Dim Path, Filename As String

Path = "\aaabbbccc"
Filename = ActiveSheet.Name _
& "_" _
& ActiveSheet.Cells.Find(What:="Date:", 
LookIn:=xlValues, Lookat:=xlWhole).Offset(0, 1) _
& "_" _
& ActiveSheet.Cells.Find(What:="S/N:", LookIn:=xlValues, 
Lookat:=xlWhole).Offset(0, 1) _
& "_" _
& ActiveSheet.Cells.Find(What:="FRI#:", LookIn:=xlValues, 
Lookat:=xlWhole).Offset(0, 1) _
Application.ScreenUpdating = False
'Move to New Workbook
ActiveSheet.Unprotect
On Error Resume Next
ActiveSheet.ShowAllData
On Error GoTo 0
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:=Path & Filename & ".xlsm", 
FileFormat:=xlNormal
Application.DisplayAlerts = False
**ActiveWorkbook.Close**
Application.DisplayAlerts = False
Application.DisplayAlerts = True
'Restore User View
Application.DisplayFormulaBar = True
With ActiveWindow
.DisplayHorizontalScrollBar = True
.DisplayWorkbookTabs = True
.DisplayHeadings = True
End With
Application.ScreenUpdating = False
End Sub

Sub FullySubmit()
Dim Path, NewPath As String, OldFile As String
Path = "\aaabbbccc"
Filename = ActiveSheet.Name _
& "_" _
& ActiveSheet.Cells.Find(What:="Date:", LookIn:=xlValues, 
Lookat:=xlWhole).Offset(0, 1) _
& "_" _
& ActiveSheet.Cells.Find(What:="S/N:", LookIn:=xlValues, 
Lookat:=xlWhole).Offset(0, 1) _
& "_" _
& ActiveSheet.Cells.Find(What:="FRI#:", LookIn:=xlValues, 
Lookat:=xlWhole).Offset(0, 1) _
& "_" _
& ActiveSheet.Cells.Find(What:="Completion Date:", 
LookIn:=xlValues, Lookat:=xlWhole).Offset(0, 1) _
NewPath = "\aaabbbcccddd"
OldFile = ActiveWorkbook.FullName
'ActiveWorkbook.SaveAs Filename:=NewPath & Filename & ".xlsm", 
FileFormat:=xlNormal
ActiveWorkbook.SaveAs Filename:=NewPath & Filename & ".xls", 
FileFormat:=xlNormal
Kill OldFile
End Sub

似乎

FileFormat:=xlOpenXMLWorkbookMacroEnabled  

而不是

FileFormat:=xlNormal 

足够了。

最新更新