我已经搜索了这个,并为此找到了多种解决方案,但它们都没有为我工作。我倾向于认为这是因为我在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
答案 0 :(得分:2)
好吧,此代码将删除该事件。您保存了工作簿的副本,所以我的想法是
无论如何,先测试几次以确保它有效。用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