热键被再次打开工作簿

问题描述:

我有一个工作簿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 + Book2打开,我得到一个消息框:

this book: Book1.xlsm 
active: Book1.xlsm 

所以Book1运行abc(),但我猜来自Book2.OnKeyWorkbook_Open()正在导致Book2重新打开,即使它实际上未调用Book2abc()

如何防止Book2重新打开?有没有办法删除它的.OnKey,但保留Book1的完好?

+1

是的,这里也一样。必须有一些解决方法...:d –

+1

如果我们将它放在workbook_Activate中,并且在Workbook_Deactivate时将其删除,该怎么办? –

我确认,我试过了,如果使用Activate和Deactivate事件,它会正常工作。

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,并将其保留为另一个,因为OnKey与Application对象相关,而不是与WB相关。但是,Activate/Deactivate解决方法似乎正常工作。