使用 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 项目的更改。