在“另存为”function后禁用VBA模块

当模板打开时,它运行一个Auto_open模块。

Sub Auto_Open() SaveAsUserForm.Show End Sub 

然后,这将提出一个用户表单,说请保存为一个OK命令button。

在这里输入图像说明

点击确定后,将运行此代码。

 Private Sub SaveAs_Click() Dim bFileSaveAs As Boolean bFileSaveAs = Application.Dialogs(xlDialogSaveAs).Show If Not bFileSaveAs Then Unload Me If bFileSaveAs Then Dim x As Object Set x = Application.VBE.ActiveVBProject.VBComponents x.Remove VBComponent:=x.Item("Auto_Open") Unload Me End Sub 

这将删除Auto_Open模块,以便保存为用户窗体不会在刚刚保存的新文件中popup。 但是,我只想要它被禁用,如果使用另存为function(都使用自动打开模块或在文件选项卡

我也需要它,所以如果用户取消该框将完全禁用保存function,只允许保存为。 但是,如果使用保存function,它要求input密码,所以我可以编辑模板。

所以,基本上当用户打开模板时,他不能做任何改变,除非他另存为第一,然后一旦它的存储为和文件名更改它将禁用Auto_Open模块,因此它不会要求保存,因为每次新文件打开。

您可以在运行时修改代码。 您可以使用ReplaceLine方法replace调用SaveAsUserForm.Show的一行注释:

 Dim mdl As CodeModule Set mdl = x.Item("Auto_Open") mdl.ReplaceLine(3, "'SaveAsUserForm.Show") 

警告:如果要更换的行号更改,此代码将覆盖新行。 我build议find有问题的文本的行号,然后使用ReplaceLine和行号。

(这应该是直截了当的,但不是这样,显然你必须得到模块中的行数 ,读取模块中的所有行,传递行数,按行分割文本,find与匹配文字一致)。