簡體   English   中英

刪除Workbook_Open代碼在使用VBA中的“另存為”保存的副本中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM