2016-05-31 49 views
1

我有一個User-formuserform處理/執行/用戶窗體中的任務管理與鍵盤的幫助(快捷鍵)

對於大多數Check-Boxes/Buttons我分配了一個Key。可以通過按執行:

Alt鍵 + 分配鍵

我GOOGLE了下面的代碼。

Private Sub UserForm_Initialize() 

Me.PASTE.Accelerator = "V" 
Me.CEEMEA.Accelerator = "C" 

End Sub 

問題是,我必須按Alt鍵關鍵執行任何給定的任務。

問:是否有任何簡短的方法可以不按Alt關鍵?

我的進步羅賓的原始應答

首先我把重點放在按鈕後。

Private Sub UserForm_Initialize() 

    Me.Macros.SetFocus 

End Sub 

然後在Macro_KeydownEvent我把下面的代碼。

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

    If KeyCode = vbKeyB Then 
    Bulgaria.Value = Not Bulgaria.Value 
    ElseIf KeyCode = vbKeyE Then 
    Estonia.Value = Not Estonia.Value 
    ElseIf KeyCode = vbKeyH Then 
    Hungary.Value = Not Hungary.Value 
    ElseIf KeyCode = vbKeyA Then 
    Latvia.Value = Not Latvia.Value 
    ElseIf KeyCode = vbKeyL Then 
    Lithuania.Value = Not Lithuania.Value 
    ElseIf KeyCode = vbKeyM Then 
    Macedonia.Value = Not Macedonia.Value 
    ElseIf KeyCode = vbKeyP Then 
    Poland.Value = Not Poland.Value 
    ElseIf KeyCode = vbKeyR Then 
    Romania.Value = Not Romania.Value 
    ElseIf KeyCode = vbKeyU Then 
    Ukraine.Value = Not Ukraine.Value 
    End If 

End Sub 
+1

嗨 - 關於你的新方法,使用'的'Macros'按鈕SetFocus' - 我可以看到,只要工作作爲用戶沒有焦點切換到另一個控件。如果你希望能夠打開和關閉'CheckBox'值,那麼在你的'Macros_KeyDown'處理程序中,使用這個例子:'Bulgaria.Value = Not Bulgaria.Value' –

回答

4

更新答案

原來的答案並沒有真正滿足短暫的,因爲同時處理爲例如在UserForm事件KeyDown適用於沒有其他控件的表單,它不適用於帶有控件的表單。這是因爲該事件僅在表單具有焦點時才起作用。當表單有其他控件時,它永遠不會收到焦點。此外,不可能將焦點設置到UserForm。幾乎所有的表單都會有一些其他的控制,所以原來的答案實際上是無用的。所以讓我們無恥地適應Andy Pope on MSDN的想法來滿足OP的要求。

首先,插入一個VBA Class到項目中使用此代碼:

Public WithEvents m_objGroupCheckBox As MSForms.CheckBox 

Private Sub m_objGroupCheckBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    MsgBox "Keypress was: " & Chr(KeyCode) & " on " & m_objGroupCheckBox.Caption 
    Select Case Chr(KeyCode) 
     Case 1: 
      UserForm1.CheckBox1.Value = Not UserForm1.CheckBox1.Value 
     Case 2: 
      UserForm1.CheckBox2.Value = Not UserForm1.CheckBox2.Value 
     Case "3" 
      UserForm1.CheckBox3.Value = Not UserForm1.CheckBox3.Value 
    End Select 
End Sub 

Class定義一個通用的事件處理程序的UserForm一個CheckBox。就本例而言,我們將按鍵1,2和3切換窗體上的3 CheckBox s的複選框狀態。

其次,將代碼放在Userform的初始化事件中。它會創建一個此自定義類的集合,該集合引用回在UserForm上創建的原始複選框。

Private m_colCheckBoxes As Collection 

Private Sub UserForm_Initialize() 

    Dim lngIndex As Long 
    Dim objGroupCheckBox As clsGroupCheckBox 

    Set m_colCheckBoxes = New Collection 
    For lngIndex = 1 To 3 
     Set objGroupCheckBox = New clsGroupCheckBox 
     Set objGroupCheckBox.m_objGroupCheckBox = Me.Controls("CheckBox" & lngIndex) 
     m_colCheckBoxes.Add objGroupCheckBox, CStr(m_colCheckBoxes.Count + 1) 
    Next 

End Sub 

所以,現在,如果我們有這樣的設計師UserForm,名爲CheckBox1CheckBox2CheckBox3每個複選框:

enter image description here

然後,我們一般的事件處理程序將允許我們定義一個地方來處理KeyDown事件並在一個地方設置CheckBox狀態。

enter image description here

原來的答覆 - 因爲它看起來:(

您可以直接處理KeyDown事件UserForm的,並在那裏輸入您的特定的邏輯不一樣有用也許你應該看看KeyUpKeyPress這取決於你如何看待表單的工作方式

MSDN注意到'...「A」和「a」作爲同一個鍵返回,它們具有相同的鍵碼值,但請注意「1 「關於打字r鍵和數字鍵盤上的「1」作爲不同的鍵返回,即使它們生成相同的字符。' - MSDN Link

您也可以處理SHIFT,CTRL和ALT。

Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    If KeyCode >= vbKeyA And KeyCode <= vbKeyZ Then 
     MsgBox "You pressed " & Chr(KeyCode) 
    ElseIf KeyCode >= vbKeyF1 And KeyCode <= vbKeyF12 Then 
     MsgBox "Function time!" 
    End If 
End Sub 
+0

我把它放在我的用戶表單中一旦。我不明白這個問題。我搜索它說有一種叫做'focus'防止msgbox?你可以幫助 –

+0

我有'用戶形式'這就是爲什麼它不工作的控件。 我該怎麼做。請幫助我。 –

+0

@IbneAshiq查看各個控件的事件列表(當在左側窗口中選擇控件時,VBA代碼窗口中的右側框)。您會發現Robin描述的適用於各個控件類型的等價物。 –

0
'VBA Shortcut Keys not work in UserForm [Partially Solved] 

Public Sub CallSub() 'code must be in Module 
'-do this code- 


Private Sub Workbook_Activate() 'code must be in (ThisWorkbook) 
Application.OnKey "^{f5}", "callSub" 

'^ this code only work with Excel Worksheet not in Userform 


Private Sub XxX_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 'code must be in Userform with SHOWMODAL = False 
If KeyCode = 17 Then AppActivate "microsoft excel" 

'XxX means all CommandButton and Textbox and Listbox and Combobox 
'Keycode 17 is Ctrl Key if you are using Ctrl+F5 - when you press Ctrl it will activate Excel Worksheet