Назначение горячих клавиш кнопкам на формах, созданных для Excel VBA - PullRequest
4 голосов
/ 27 августа 2009

Я создал макрос для Excel, который будет отображать форму, содержащую кнопку и текстовое поле. Есть ли способ назначить горячие клавиши, такие как «Ctrl + Enter» или «F12» для кнопок? Горячая клавиша должна работать независимо от того, на каком поле или кнопке находится фокус.

(до сих пор мне удалось создать кнопки / fields_Keydowns для проверки MSForms.ReturnInteger для vbKeyF12, но я должен сделать это для каждого поля и кнопки, есть ли более простой способ?)

Скажем, у меня есть 2 вещи в форме, кнопка "CommandButton1" и текстовое поле "TextBox1"

код для кнопки:

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

Горячая клавиша будет полезна, когда я добавлю больше полей и кнопок ...

Также, как мне установить кнопку 'Escape', чтобы закрыть / скрыть форму?

Ответы [ 2 ]

6 голосов
/ 27 августа 2009

Чтобы установить клавишу «Escape», чтобы активировать кнопку, чтобы закрыть / скрыть форму: Во-первых, вам нужна кнопка, чье событие Click скрывает вашу форму. Затем установите для свойства «Отмена» этой кнопки значение True.

Когда ваша форма отображается и вы нажимаете клавишу Esc, форма закрывается.

Для 'HotKey' установите для свойства Accelerator вашей кнопки букву, затем, когда ваша форма открыта, если вы нажмете Alt + [ваше письмо], событие Click этой кнопки будет срабатывать.

1 голос
/ 18 августа 2016

Единственный способ сделать это - добавить событие 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
...