Ужасно и громоздко, но вы можете написать «промежуточный» макрос, который использует 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