Как использовать горячие клавиши (Ctrl + C, C) для макроса VBA - PullRequest
0 голосов
/ 11 июня 2019

Я хочу назначить аккорд горячей клавиши, например Ctrl + C , C для вызова макроса VBA excel. Пожалуйста, помогите мне. Я пытаюсь использовать Application.Onkey, но не могу.

1 Ответ

1 голос
/ 11 июня 2019

Ужасно и громоздко, но вы можете написать «промежуточный» макрос, который использует GetAsyncKeyState для определения состояний клавиш и проверки, если C отпущен, а затем снова нажат.

Как Матье Гиндон справедливо упоминается в комментариях, повторная привязка Ctrl + C (по умолчанию ярлык "copy") - это "хлопотно" - так что это будет запустите обычное действие копирования , если вы не нажмете C в течение 1 секунды после запуска макроса.

Option Explicit

Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long

Const VK_C As Long = &H43

Public Sub CtrlCMacro()
    Dim keyCReleased As Boolean, timeLimit As Single
    keyCReleased = False

    timeLimit = Timer + 1 'This gives you 1 second to release-and-press C
    'On Windows, this is correct to Fractions of a Second.
    'On Mac, it is whole seconds, so will not always behave properly, and can give you 0.1 seconds to act

    While timeLimit > Timer
        'This will check if you release and then re-press "C"
        If GetAsyncKeyState(VK_C) = 0 Then
            'You have to release the key before you can press it again!
            keyCReleased = True
        ElseIf keyCReleased Then
            'Application.OnTime ensures that THIS sub finishes before the next macro starts
            Application.OnTime Now(), "MyOtherMacro"
            Exit Sub
        End If
    Wend

    'Default action for Ctrl+C should be Copy
    Selection.Copy
End Sub

Public Sub MyOtherMacro()
    MsgBox "The Macro Ran!"
End Sub

'Debug Stuff
Private Sub SetCtrlC()
    'Bind
    Application.OnKey "^c", "CtrlCMacro"
End Sub

Private Sub ResetCtrlC()
    'Reset to normal state
    Application.OnKey "^c"
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...