[英]Remove Workbook_Open Code In the copy saved with Save As from VBA
我试图强制用户保存新填充的模板(使用VBA和其中的宏创建)以避免重新打开时丢失数据(因此用户不必在每次创建执行程序后删除数据) ,我读了一些关于启用和禁用事件的内容,我尝试了但没有运气。 它保存了同一本书但如果我打开它,它似乎仍在执行。 无论如何从那个副本剥离宏?
我唯一对禁用和/或删除感兴趣的宏将是Workbook_Open中的代码,因为那是调用模块代码的代码......而且我只想将它从我复制的副本中删除用另一个名字保存。 不是用户首先打开的文件。
进一步解释:
我需要Workbook_Open上的代码。 让我试着更好地解释一下,我有一张包含所有代码的工作表,当它打开时,它会要求你选择一些输入文件以填充工作簿,完成之后,它会要求用户保存填写工作簿作为副本,但当我打开保存的副本时,就像我打开第一张表。 而且我想展示填充的模板,而不是像精确的副本。 这就是我想删除工作簿的原因
码:
Application.ScreenUpdating = True
ThisWorkbook.Activate
MsgBox "Site Configuration List" & vbNewLine & "Generated Sucessfully", vbOKOnly, "SCL Generated Sucessfully"
MsgBox "Remember to save the file with a different filename" & vbNewLine & "The next time the program executes it'll erase all information contained in it", vbInformation
SaveWorkbookAsNewFile (Project & "_" & ProjectName)
Private Sub SaveWorkbookAsNewFile(NewFileName As String)
Dim ActSheet As Worksheet
Dim ActBook As Workbook
Dim CurrentFile As String
Dim NewFileType As String
Dim NewFile As String
Application.ScreenUpdating = False ' Prevents screen refreshing.
Application.EnableEvents = False
CurrentFile = ThisWorkbook.FullName
NewFileType = "Excel Files 1997-2003 (*.xls), *.xls"
NewFile = Application.GetSaveAsFilename( _
InitialFileName:=NewFileName, _
fileFilter:=NewFileType)
If NewFile <> "" And NewFile <> "False" Then
ActiveWorkbook.SaveCopyAs Filename:=NewFile, _
FileFormat:=xlNormal, _
Password:="", _
WriteResPassword:="", _
ReadOnlyRecommended:=True, _
CreateBackup:=False
End If
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
我正在使用excel 2007.在新文件(填充表)中,我不需要任何代码。 我只想展示信息,就是这样 - Splendonia刚才
在这种情况下,您需要做的就是将文件另存为.xlsx
文件。 您不必执行删除代码的繁琐工作。 此文件将自动删除所有代码。
改变线
ActiveWorkbook.SaveCopyAs Filename:=NewFile, _
FileFormat:=xlNormal, _
Password:="", _
WriteResPassword:="", _
ReadOnlyRecommended:=True, _
CreateBackup:=False
至
ActiveWorkbook.SaveAs Filename:=NewFile, _
FileFormat:= xlOpenXMLWorkbook , _
Password:="", _
WriteResPassword:="", _
ReadOnlyRecommended:=True, _
CreateBackup:=False
还记得相应地更改NewFileType
。
编辑
哎呀,我忘了说我可能需要将它保存为.xls文件,用户稍后需要上传的程序不支持> excel2007文件 - Splendonia 5分钟前
要删除Workbook_Open
,请使用此代码(TRIED AND TESTED)。 由Chip Pearson提供 。 在尝试此代码之前,请不要忘记阅读链接中提到的Introduction
。
Option Explicit
Sub DeleteProcedureFromModule()
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Dim StartLine As Long
Dim NumLines As Long
Dim ProcName As String
Set VBProj = ActiveWorkbook.VBProject
Set VBComp = VBProj.VBComponents("ThisWorkbook")
Set CodeMod = VBComp.CodeModule
ProcName = "Workbook_Open"
With CodeMod
StartLine = .ProcStartLine(ProcName, vbext_pk_Proc)
NumLines = .ProcCountLines(ProcName, vbext_pk_Proc)
.DeleteLines StartLine:=StartLine, Count:=NumLines
End With
End Sub
我不确定这在代码中是否可行......(看Siddharth证明我错了)..
我能想到的一种方法是在运行代码之前检查专用单元格中是否存在值。
Private Sub Workbook_Open()
Dim rng As Range
Set rng = Sheet1.Range("A1")
If rng.Value = "run" Then
'put code in here
rng.Value = ""
End If
End Sub
你能解释为什么你提供的链接不适合你吗? 我打算提出类似的建议......似乎如果他们要保存一个新副本,那么你可以在BeforeSave事件上拦截它,然后使用标准API从模块中删除代码。 看看这个:
http://msdn.microsoft.com/en-us/library/aa443970(v=vs.60).aspx
这个对象在VBA中可以使用,这样的东西应该适用于你正在解释的内容...但如果不是那么我们会帮助你更好,如果你能解释在哪里以及为什么这不做什么你期待着它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.