我在Excel中創建了一個表單。它由3個命令按鈕和一個包含複選框的框架組成。根據Excel工作表中的表格,該複選框在userform_initialize
處動態填充(該想法易於用戶定製)。該框架的原因是可以有很多複選框,我希望用戶能夠滾動瀏覽它們。無法將Userform.KeyPreview設置爲true
我現在的目標是爲表單創建鍵盤快捷鍵。我陷入困境的是,我不能蠻力爲每個複選框寫KeyDown
處理程序,因爲我不知道哪些將會存在。我意識到,如果我可以在表單級別擁有事件處理程序,它也會更好。谷歌搜索找到了我的形式的KeyPreview
財產。不幸的是,VBA IDE中的屬性窗口沒有顯示它,當我嘗試通過設置Me.KeyPreview = True
userform_initialize
以編程方式訪問它時,VBA會發出編譯錯誤:「找不到方法或數據成員」 - 我期望它不是在屬性窗口中,但值得一試。
我覺得好像有什麼東西,我明顯缺失的,所以我想我會花時間學習如何寫,然後完全重寫的形式,一類是在MSDN示例代碼之前問: https://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview(v=vs.110).aspx。 我幸運嗎?
我承認正處於我的VBA知識的極限,我正在尋求擴展它。任何一般的概念或上下文,我應該紅,將不勝感激。
UPDATE
現在我想GetAsyncKeyState
和Application.Onkey
。
據我所知,GetAsyncKeyState
只能在無限的DoEvents
循環內工作。我試圖啓動一個希望表單仍然會加載,但當然沒有 - 我卡在循環中。
Application.Onkey
的問題是我無法將事件函數分配給userform模塊中的鍵。這使我感到困惑,因爲其他事件處理程序可以進入用戶表單模塊。實際上,我將它放在Userform_Initialize
程序中。是因爲它不是表單事件而是應用程序事件?
編輯
我似乎有一些作品,但奇怪的問題說明如下: Event handling class will not fire unless I use a breakpoint when initializing form 謝謝@UGP
該鏈接適用於VB.NET而不是VBA。它不能簡單地應用於它。 'KeyPreview'只是Access VBA中的一種方法,不適用於Excel。 – UGP
也許[this](https://codereview.stackexchange.com/questions/44361/form-controls-single-event-handler-for-multiple-controls-without-sacrifices)可以幫助你。 – UGP
非常感謝@UGP,直到最後我都充滿希望。招貼說「'KeyPress'是一種特殊情況 - 通過在表單級別開啓'KeyPreview',我可以在窗體的'Form_KeyPress'事件中捕獲所需的KeyAscii到'mLastKeyPressedAscii'中,並且通過」。看來我回到了第一位?此外,上面發佈更新。 – PKB