2009-08-27 119 views
3

我为Excel创建了一个宏,该宏将弹出包含按钮和文本字段的窗体。有没有办法给按钮分配热键,例如'ctrl + Enter'或'F12'?无论焦点在哪个字段或按钮上,热键都可以工作。将热键分配给为excel创建的窗体上的按钮vba

(到目前为止我已成功地创建按钮/ fields_Keydowns检查MSForms.ReturnInteger为vbKeyF12,但我必须这样做,对于每一个领域和按钮,有没有更简单的方法?)

说,我2对事物的形式,按钮“CommandButton1的”文本框和“TextBox1的”关于按钮

代码:

Private Sub CommandButton1_click() 
ActiveCell.FormulaR1C1 = UserForm1.TextBox1.Text 
End Sub 

,当我在更多的领域和按钮添加的热键将是有益的......

如何设置'Escape'按钮关闭/隐藏表单?

回答

5

设置'Escape'键激活您的按钮以关闭/隐藏表单:首先,您需要一个Click事件隐藏表单的按钮。然后将该按钮的“取消”属性设置为True。

当您的表单被显示,并且您按下Esc时,表单将关闭。

对于'HotKey',将按钮的Accelerator属性设置为一个字母,然后当表单打开时,如果按Alt + [您的字母],则该按钮的Click事件将被触发。

+0

嗨,谢谢Stewbob。 '取消'属性很有用! 对于热键,alt + [letter]并不是我想要的。是否可以用Ctrl + Enter或F1-F12键来改变按键的热键? – Yoga 2009-08-28 02:50:29

+1

不确定,您将不得不使用Accelerator属性进行一些实验。 – Stewbob 2009-08-28 13:25:17

1

做到这一点的唯一方法是添加KeyUp事件为它调用中央键盘处理程序窗体的每个控件:

Option Explicit 

Private Sub CommandButton1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    HandleKey KeyCode 
End Sub 

Private Sub CommandButton2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    HandleKey KeyCode 
End Sub 

Private Sub UserForm_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
    HandleKey KeyCode 
End Sub 

Private Sub HandleKey(KeyCode As MSForms.ReturnInteger) 
    MsgBox KeyCode 
    Select Case KeyCode 
    Case 112 'F1 
     'Do something because F1 was pressed 
    Case 113 'F2 
     'Do something because F2 was pressed 
    Case 114 'F3 etc. 
    End Select 
End Sub