2014-06-30 29 views
0

我發現這個代碼在網上,它就像一個魅力:爲什麼與F1,而不是CTRL-M(例如)此代碼的工作

Sub Auto_Open() 
    Application.OnKey "{F1}", "WorkbooksHandler" 
End Sub 

Sub WorkbooksHandler() 
    On Error Resume Next 
    If ActiveWorkbook.Sheets.Count <= 16 Then 
    Application.CommandBars("Workbook Tabs"). _ 
    ShowPopup 500, 225 
    Else 
    Application.CommandBars("Workbook Tabs"). _ 
    Controls("More Sheets...").Execute 
    End If 
    On Error GoTo 0 
End Sub 

我按F1鍵,它會打開所有的對話牀單。我可以選擇我想要的工作表,然後轉到那裏。

如果我更改代碼稍稍及用途:

Sub Auto_Open() 
    Application.OnKey "^{m}", "WorkbooksHandler" 
End Sub 

現在CONTROL-M與對話打開給我看的表,但是當我點擊在紙張上我希望Excel不瀏覽那裏。爲什麼觸發器有什麼區別,並使執行不起作用?

編輯:順便說一句,當我用F5手動運行它時,代碼也可以正常工作,而不是使用onkey控件-m。

+0

請縮小你的問題:它還是原來的還是別的? Rgds, –

+0

@AlexBell當我使用相同的Sub WorkbooksHandler()與不同的觸發器 - 控制-M而不是F1時,那麼它不會再正常執行。 – Eliyahu

+0

那麼,什麼是錯誤(確切的定義,而不是相當廣泛的定義「不能正確執行」)? Rgds, –

回答

2

這個問題似乎是控制鍵,當與OnKey一起使用時,即使您毫無疑問地釋放了密鑰,仍然會貫穿整個命令。這對你所做的大多數事情都沒有影響,但莫名其妙地影響了「更多表格」彈出窗口。以此代碼

Sub Auto_Open() 
    Application.OnKey "^m", "WorkbooksHandler" 
End Sub 

Sub WorkbooksHandler() 

    SendKeys "{RIGHT}" 

End Sub 

所做的只是按右箭頭鍵。但它具有按Ctrl + Right的效果,它將您帶到工作表的邊緣(用於空白工作表)。因此,^ m的控制部分將貫穿執行WorkbooksHandler。

這也是手動發生的。按住控制鍵,右鍵單擊工作表導航按鈕,選擇更多工作表,選擇工作表。當您按住Control鍵時,它不會移動到該表格。

我嘗試了SendKeys,OnTime和DoEvents的所有方式,但無法誘騙Excel釋放Control鍵。我敢打賭,你可以找到一個可以實現這個技巧的Windows API,但是簡單地選擇一個不使用Control的組合鍵可能更容易。

0

確保

Sub WorkbooksHandler() 
    On Error Resume Next 
    If ActiveWorkbook.Sheets.Count <= 16 Then 
    Application.CommandBars("Workbook Tabs"). _ 
    ShowPopup 500, 225 
    Else 
    Application.CommandBars("Workbook Tabs"). _ 
    Controls("More Sheets...").Execute 
    End If 
    On Error GoTo 0 
End Sub 

模塊粘貼,

然後 編譯和運行Auto_Open()手動然後嘗試快捷

+0

我做了,但是這給了我相同的結果 - 打開「活動」對話框,但不導航到選定的工作表。 – Eliyahu

+0

當你說手動編譯並運行Auto_Open()時,你的意思是F5在激活時是否正確? – Eliyahu

+0

Alt + F8然後從列表中選擇Auto_Open – EvenPrime