使用代码删除代码

时间:2018-02-15 16:21:02

标签: excel vba excel-vba

我已经搜索了这个,并为此找到了多种解决方案,但它们都没有为我工作。我倾向于认为这是因为我在Excel中使用VBA编程时的知识和能力有限。如果这是已经发布的问题的重复问题,我表示歉意。

问题:

我有一个在打开Excel Workbook时执行的代码。执行的代码将工作簿保存为位于单元格中的值名称下的新工作簿。我需要在打开Excel工作簿时执行的代码不能在已创建的新副本上运行。我能想到的最佳方法是使用代码删除在Excel Workbook打开时执行的部分或全部代码。我以前见过这个解决方案,我知道存在一个解决方案,但我不知道如何正确地将代码实现到我的程序中以便工作,我甚至不知道我找到的代码是否有用这就是为什么我没有在这提供。这是我到目前为止的代码,其中的注释解释了我在代码中需要的内容。对此的任何帮助都是巨大的。

由于

Private Sub Workbook_Open()

 'Saves filename as value of C10 

Dim newFile As String, fName As String

fName = Range("C10").Value

newFile = fName & " " & Range("E9").Value

ChDir Range("A8")
ActiveWorkbook.SaveCopyAs Filename:=newFile

'Need code to delete a line of code or all code to prevent the code above from executing when the new Worksheet that has been created is opened.

ActiveWorkbook.Close False
End Sub

1 个答案:

答案 0 :(得分:2)

好吧,此代码将删除该事件。您保存了工作簿的副本,所以我的想法是

  1. 你做你做的一切
  2. 删除Workbook_open宏
  3. 保存到新的工作簿(宏的一部分不会是
  4. 不要保存原始工作簿中的更改,因此Workbook_Open宏将始终是安全的。
  5. 无论如何,先测试几次以确保它有效。用VBA本身改变VBA代码可能会产生一些奇怪的东西。

    希望这有帮助。

    所有积分均转至OZGRIZ

    此外,确保您签入Excel选项 - >可信站点 - >可信站点的设置 - >宏设置 - >检查对Visual Basic编辑器的信任访问

    Sub DeleteWorkbookEventCode()
    
    ''Needs Reference Set To _
    
        '"Microsoft Visual Basic For Applications Extensibility"
    
    'Tools>References.
    
    'Also, make sure you check in Excel Options->Trusted Sites->Settings of Trusted Sites-> Macros Setting-> Check Trust access to Visual Basic Editor
    
    Dim i As Integer
    Dim MyStart, MyEnd As Integer
    
    With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
    
    MyStart = 0
    
        For i = 1 To .CountOfLines Step 1
            If .Lines(i, 1) = "Private Sub Workbook_Open()" Then MyStart = i
    
            If .Lines(i, 1) = "End Sub" And MyStart > 0 Then
                MyEnd = i
                Exit For
            End If
        Next i
    
        .DeleteLines MyStart, (MyEnd - MyStart) + 1
    
    End With
    
    End Sub