【问题标题】:Using code to delete code使用代码删除代码
【发布时间】:2018-02-16 00:52:30
【问题描述】:

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

问题:

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

谢谢

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

【问题讨论】:

  • 正常保存 xlsx 不行吗?
  • 不,很遗憾,我也会将代码添加到新副本中。

标签: vba excel


【解决方案1】:

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

  1. 你做任何你做的事
  2. 删除 Workbook_open 宏
  3. 保存到新工作簿(宏的那部分不会)
  4. 不要在原始工作簿中保存更改,因此 Workbook_Open 宏将始终安全。

无论如何,请先对其进行多次测试以确保其正常工作。使用 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

【讨论】:

  • 完美运行。供将来参考如果想在另一个模块(例如模块 1)上使用它而不是在 VBComponents 旁边键入“ThisWorkbook”,我只需键入“Module1”吗?
  • 首先,如果答案对您有用,请将其标记为正确,这样问题就会显示为已关闭。二、关于你的问题,看Deleting Modules via VBA Code
  • 哎呀对不起!非常感谢您的帮助!
猜你喜欢
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
  • 2013-05-20
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
相关资源
最近更新 更多