将带有代码的Excel工作表保存为xlsm会释放代码

将带有代码的Excel工作表保存为xlsm会释放代码,excel,vba,save-as,Excel,Vba,Save As,我正在动态创建工作表,效果很好。其中一张创建的图纸确实包含VBA(工作表激活),该工作表是使用VBA插入的,同样工作正常 现在我试图保存创建的文件,while循环用于强制保存 我试过: 我试着用 Application.FileDialog(msoFileDialogSaveAs) 方法 工作和创建一个.xlsm文件,其中包含所有生成的内容,除了工作表上的VBA代码外,它与普通的.xlsx文件一样是空的 有趣的是,如果您在保存文件后停止该过程,并按ctrl+s Excel可识别出某些内容已更改

我正在动态创建工作表,效果很好。其中一张创建的图纸确实包含VBA(工作表激活),该工作表是使用VBA插入的,同样工作正常

现在我试图保存创建的文件,while循环用于强制保存 我试过:

我试着用

Application.FileDialog(msoFileDialogSaveAs)
方法

工作和创建一个.xlsm文件,其中包含所有生成的内容,除了工作表上的VBA代码外,它与普通的.xlsx文件一样是空的

有趣的是,如果您在保存文件后停止该过程,并按ctrl+s Excel可识别出某些内容已更改并保存整个工作簿

但是如果我在那之后用

workbookUsed.Close
我再次得到一个文件,其中没有VBA代码,即使我将其设置为关闭时不保存


因此,是否需要设置任何特殊参数,以便保存整个工作簿,包括vba内容?

例如,您可以将保存文件的代码保存在名为
SaveWorkbook
的单独过程中,并在主过程结束时使用以下代码:

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

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

奇怪,您的子系统名称是什么?您是否尝试编译VBA项目?实际上,您是否在保存文件的同一子过程中在VBA项目的工作表对象中添加代码?否,我有一个主子
子LCD()
它包含
设置LCD\u wb=工作簿。添加
并调用创建工作表所需的所有子组件(大约40),它调用的最后一个Sub是上面显示的名为'Sub saveFile()'的Sub,谢谢,这样可以,但有一些主要缺点。如果使用OnTime方法,整个脚本将保持运行,下一个子脚本将被执行。这意味着我的main方法完成,“SaveWorkbook”运行。由于“SaveWorkbook”后面跟着另一个子对象,这将迫使我在保存后对所有需要执行的子对象进行蛇形跟踪(ok可以完成,但脏),但这也意味着我不能再调用“workbookUsed”对象。因为睡眠和等待都很重要,所以它们也不起作用。但现在我知道我得腰围了time@kai,另一个选项是在另一个Excel实例中创建新工作簿。请参阅本文中的示例方法3:我现在改为将安全代码写入工作簿中的一个新工作表中,该工作表在代码完成时被激活(在代码上写上程序完成的内容),并将所有ActionHandler置于触发安全例程的位置。例程的最后一行删除此工作表。不太好,但是可以工作,而且计算速度不会有任何问题。
Application.OnTime Now + TimeSerial(0, 0, 2), "SaveWorkbook"