2015-10-13 194 views
1

我有一個工作簿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時將其刪除,該怎麼辦? –

回答

1

我確認,我試過了,如果使用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解決方法似乎正常工作。