我有一个工作簿Book1
,它在开启时设置了热键:
Public Sub workbook_open()
Application.OnKey "^m", "abc"
End Sub
以下是abc()
的代码:
Sub abc()
bkName = ActiveWorkbook.Name
runString = "'" & bkName & "'!xyz"
Application.Run runString
End Sub
Sub xyz()
MsgBox "this book: " & ThisWorkbook.Name & vbNewLine & "active: " & ActiveWorkbook.Name
End Sub
我有一个代码相同的工作簿Book2
。当我打开Book1
,然后打开Book2
,然后关闭Book2
,然后按 Ctrl + m ,{{1} }打开,我得到一个消息框:
Book2
this book: Book1.xlsm
active: Book1.xlsm
正在运行Book1
,但我想abc()
.OnKey
的{{1}}导致Book2
重新打开,即使它实际上没有调用Workbook_Open()
Book2
。
如何阻止Book2
重新开启?有没有办法删除abc()
,但保留Book2
完好无损?
答案 0 :(得分:1)
我确认,如果您使用激活和停用事件,我尝试了它并且它正常工作。
Private Sub Workbook_Activate()
Application.OnKey "^m", "abc"
End Sub
Private Sub Workbook_Deactivate()
Application.OnKey "^m"
End Sub
当Book2关闭或停用时,它将删除其OnKey。但是Book1将激活并设置自己的OnKey。它按预期工作,不再重新打开已关闭的工作簿。
我认为您无法从一个WB中删除OnKey并将其保留为另一个WB,因为OnKey与Application对象相关,而不是与WB相关。但Activate / Deactivate的解决方法似乎正常工作。