打开模板时,它会运行Auto_open模块。
Sub Auto_Open()
SaveAsUserForm.Show
End Sub
然后会显示一个用户表单,上面写着“保存为”和“确定”命令按钮。
单击“确定”时,它将运行此代码。
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模块,因此不会在刚刚保存的新文件中弹出另存为用户表单。但是我只想在使用save as函数时禁用它(使用自动打开模块或在文件选项卡中
我也需要它,所以如果用户取消该框,它将完全禁用保存功能,只允许另存为。但如果使用保存功能,它会要求输入密码,因此我可以编辑模板。
所以基本上当用户打开模板时他不能做或改变任何东西,除非他首先保存,然后一旦其保存为并且文件名更改它将禁用Auto_Open模块,因此它不会要求保存为每次新文件已打开。
答案 0 :(得分:1)
您可以在运行时修改代码。您可以使用ReplaceLine方法将注释行SaveAsUserForm.Show
替换为注释:
Dim mdl As CodeModule
Set mdl = x.Item("Auto_Open")
mdl.ReplaceLine(3, "'SaveAsUserForm.Show")
警告:如果要替换的行号发生变化,此代码将覆盖新行。我建议找到相关文字的行号,然后使用ReplaceLine
和该行号。
(这应该是直截了当的,但事实并非如此。显然,你必须得到count of lines in the module,通过传入行数读取所有lines in the module,逐行分割,并找到带有匹配文本的行。)