使用 xlsm 代码保存 Excel Sheet 会丢失代码
Saving Excel Sheet with code as xlsm looses the code
我正在动态创建表格,效果很好。其中一张创建的工作表确实包含 VBA (Worksheet_Activate),它是使用 VBA 插入的,也可以正常工作。
现在我正在尝试保存创建的文件,while循环用于强制保存
我试过了:
While Not workbookUsed.Saved
Dim filePath As String
filePath = Application.GetSaveAsFilename(fileFilter:="Excel File mit Makro (*.xlsm), *.xlsm")
If VarType(filePath) = vbString Then
workbookUsed.SaveAs _
FileName:=filePath, _
FileFormat:=52
End If
Wend
End Sub
我尝试使用
Application.FileDialog(msoFileDialogSaveAs)
方法。
两者都工作并创建一个 .xlsm 文件,其中包含所有生成的内容,除了工作表上的 VBA 代码,它就像一个普通的 .xlsx 文件一样是空的。
有趣的是,如果您在保存文件后停止该过程,然后按 ctrl+s Excel 会发现某些内容已更改并保存整个工作簿。
但是如果我之后使用
关闭工作簿
workbookUsed.Close
我又得到了一个文件,里面没有 VBA 代码,即使我将它设置为关闭时不保存。
那么是否需要设置任何特殊参数,以便保存整个工作簿,包括 vba 内容?
例如,您可以将保存文件的代码放在一个名为 SaveWorkbook
的单独过程中,并在主过程结束时使用以下代码:
Application.OnTime Now + TimeSerial(0, 0, 2), "SaveWorkbook"
这将安排 2 秒后将文件保存到 运行 的过程,并让 Excel 有时间在保存之前处理对 VB 项目的更改。
我正在动态创建表格,效果很好。其中一张创建的工作表确实包含 VBA (Worksheet_Activate),它是使用 VBA 插入的,也可以正常工作。
现在我正在尝试保存创建的文件,while循环用于强制保存 我试过了:
While Not workbookUsed.Saved
Dim filePath As String
filePath = Application.GetSaveAsFilename(fileFilter:="Excel File mit Makro (*.xlsm), *.xlsm")
If VarType(filePath) = vbString Then
workbookUsed.SaveAs _
FileName:=filePath, _
FileFormat:=52
End If
Wend
End Sub
我尝试使用
Application.FileDialog(msoFileDialogSaveAs)
方法。
两者都工作并创建一个 .xlsm 文件,其中包含所有生成的内容,除了工作表上的 VBA 代码,它就像一个普通的 .xlsx 文件一样是空的。
有趣的是,如果您在保存文件后停止该过程,然后按 ctrl+s Excel 会发现某些内容已更改并保存整个工作簿。
但是如果我之后使用
关闭工作簿workbookUsed.Close
我又得到了一个文件,里面没有 VBA 代码,即使我将它设置为关闭时不保存。
那么是否需要设置任何特殊参数,以便保存整个工作簿,包括 vba 内容?
例如,您可以将保存文件的代码放在一个名为 SaveWorkbook
的单独过程中,并在主过程结束时使用以下代码:
Application.OnTime Now + TimeSerial(0, 0, 2), "SaveWorkbook"
这将安排 2 秒后将文件保存到 运行 的过程,并让 Excel 有时间在保存之前处理对 VB 项目的更改。