删除Workbook_Open代码在从VBA另存为的副本中
我试图强制用户保存新填充的模板(使用VBA和macros创build),以避免在重新打开时丢失数据(所以用户在每次创build执行程序后都不必删除数据) ,我读了一些关于启用和禁用事件的信息,我尝试了但没有运气。 它保存了同一本书,但如果我打开它,似乎正在执行。 反正有去除这个副本的macros吗?
我唯一感兴趣的禁用和/或删除的macros将是Workbook_Open中的代码,因为那是调用模块代码的那个,而且我只是想把它从副本中删除,用另一个名字保存。 不是用户首先打开的文件。
进一步说明:
我需要Workbook_Open上的代码。 让我试着解释更好,我有一个工作表中的所有代码,当它打开其他事情时,它会要求您select一些input文件,以填补工作簿,完成后,它要求用户保存填充工作簿作为副本,但是当我打开保存的副本,就像我打开第一张表。 我想只显示填充的模板,而不是像一个确切的副本。 这就是为什么我想删除工作簿
码:
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
我不确定这是可能的代码…(看Siddharthcertificate我错了)..
我能想到的一种方法是在运行代码之前检查是否存在专用单元格中的值。
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
你能解释为什么你提供的链接不适合你吗? 我会build议类似的东西…好像他们是否保存了一个新的副本,那么你可以在BeforeSave事件中拦截这个事件,并使用标准的API从模块中删除代码。 看看这个:
http://msdn.microsoft.com/en-us/library/aa443970(v=vs.60).aspx
这个对象在VBA中是可以使用的,类似这样的东西对于你正在解释的东西应该可以正常工作,但是如果不是,那么如果你能解释在哪里以及为什么这样做不是在做什么你期待它做到。