2015-08-27 31 views
0

我正在設計一個GUI,允許用戶從Microsoft Excel中的UserForm向宏功能分配快捷鍵。表單完全按照預期執行,但爲了分配鍵,我使用InputBox從用戶獲取數據。使用Excel填充DropDown動態快捷方式分配的特殊鍵

但是,用戶不能在輸入框中輸入特殊鍵(如Del,F1-F12,Home,End等)。我想用Excel所識別的所有常規和特殊鍵填充DropDown作爲可行的快捷方式。

是否有一個庫對象或默認數組,我可以引用填充我的DropDown菜單或將不得不找到一個列表並手動添加每個項目到一個數組?

enter image description here

+0

如果您只是使用可通過GUI分配的快捷方式(開發人員標籤 - >宏 - >選擇一個宏 - >按選項...),那麼只有字母組合與' Ctrl'並且不允許特殊鍵。如果您想要捕獲SendKeys來啓動一個宏,那麼您甚至可以分配預定義的鍵來執行全新的和意想不到的任務(例如'F1'來退出Excel)。如果您想知道計算機上已經使用了哪些密鑰,那麼您必須檢查Windows,Excel以及[AutoHotKey](http://www.autohotkey.com/)等程序。 – Ralph

+0

我正在使用Application.OnKey屬性爲Excel分配快捷方式。我沒有捕獲SendKeys。我需要的是一種將[Del]和[F11]等密鑰動態分配給字符串變量的方式,而不會強制用戶物理鍵入字符[,D,E,L和]。我曾想過一個下拉列表,但我願意接受建議。 – Glamador

回答

1

你應該考慮使用一個TextBox KeyDown事件來捕獲用戶的輸入。把一個標籤,一個文本框的左側,使用這樣的代碼

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 

    Dim dcText As Scripting.Dictionary 

    Set dcText = New Scripting.Dictionary 

    If Shift And 2 Then dcText.Add "Ctrl", 2 
    If Shift And 4 Then dcText.Add "Alt", 4 
    If Shift And 1 Then dcText.Add "Shift", 1 

    Me.Label1.Caption = Join(dcText.Keys, "+") & "+" 
    Me.TextBox1.Text = Chr$(KeyCode) 

End Sub 

代碼需要一點的工作(如限制選項),但它應該讓你開始。

+0

這聽起來非常像我需要的東西。我不認爲我需要所有字典的東西,因爲我有按鈕直接修改標籤來表示修飾鍵。一個問題:當我使用Chr $設置輸入框文本時,會發生兩件事。如果它是一個字母鍵,它會雙擊它:按j - >「Jj」。但是如果我按一個特殊的鍵,它會產生一個隨機的字符。按[Del] - >'。',例如。 – Glamador

+0

實際的KeyDown應該在框中放置一個字母,使得Chr $部分不必要。但是這不是爲我發生的,所以我欺騙了它,然後把「這個代碼需要工作」來原諒我的錯誤代碼。按Ctrl + K:當你按下Ctrl時,Shift參數變爲2,而KeyCode參數是Ctrl的代碼(如16或其他)。然後當你按下K時,Shift保持在2,因爲它專門查看了Shift,Ctrl和Alt,但是KeyCode轉到了K的代碼。所以對於你按Ctrl而不是K的那一點,KeyCode不是你期望。你可以嘗試KeyUp來消除這個問題。 –

+0

不幸的是,Chr $只適用於普通字符。 Del和Home和F2等鍵無法正確顯示。儘管通過對每個特殊字符執行Select Case,我已經管理了一個體面的解決方法。我喜歡這個結果比使用下拉菜單更好,因爲我的用戶只需鍵入即可,而不必用眼睛掃描列表。 – Glamador