首页 > 解决方案 > 将带有代码的 Excel 工作表保存为 xlsm 会丢失代码

问题描述

我正在动态创建表格,效果很好。创建的表格之一确实包含使用 VBA 插入的 VBA (Worksheet_Activate),也可以正常工作。

现在我正在尝试保存创建的文件,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 内容?

标签: excelvbasave-as

解决方案


例如,您可以拥有将文件保存在一个单独的过程中的代码,SaveWorkbook并在主过程的末尾使用以下代码:

Application.OnTime Now + TimeSerial(0, 0, 2), "SaveWorkbook"

这将安排保存文件的过程在 2 秒后运行,并让 Excel 有时间在保存之前处理对 VBproject 的更改。


推荐阅读