How to hotkey (Ctrl+C+C) for VBA macro
Vấn đề phím tắt để gọi macro có lẽ không mới nếu như cấu trúc của nó là Ctr+shift+ A.
Tuy nhiên, nếu như bây giờ chúng ta muốn hotkey là Ctr+C+C . Tại sao lại như vậy?
Nếu là Ctr+Shift+A thì tay chúng ta phải chạm vào ba phím trên máy tính.
Nếu hotkey là hai phím, ví dụ Ctr+A thì va chạm với phím tắt chức năng. Chúng ta để ý rằng Ctr + phím bất kỳ, đều có thể là phím chức năng.
Ví dụ: Ctr+O, Ctr+C,...
Vì vậy suy nghĩ là, làm thế nào chỉ sử dụng hai phím nhưng không xung đột với các phím chức năng, ngoài ra tay phải dễ dàng thao tác với hai phím này. Và chúng ta nghĩ ngay tới lựa chọn đó là Ctr+C+C, tức là tay chúng ta giữa phím ctr và ấn C hai lần.
Để cho Ctr+C+C luôn có tác dụng, nên tạo addin excel, trong hàm workbook open nên cho call hàm SetCtrlC, như vậy phím tắt Ctr+C+C sẽ luôn có tác dụng mỗi khi thao tác trên excel.
Ứng dụng của code trên làm được rất nhiều việc nếu như kết hợp với các tính năng khác ta sẽ được một công cụ tra từ điển trực tiếp trên excel.
Topic liên quan:
Vấn đề phím tắt để gọi macro có lẽ không mới nếu như cấu trúc của nó là Ctr+shift+ A.
Tuy nhiên, nếu như bây giờ chúng ta muốn hotkey là Ctr+C+C . Tại sao lại như vậy?
Nếu là Ctr+Shift+A thì tay chúng ta phải chạm vào ba phím trên máy tính.
Nếu hotkey là hai phím, ví dụ Ctr+A thì va chạm với phím tắt chức năng. Chúng ta để ý rằng Ctr + phím bất kỳ, đều có thể là phím chức năng.
Ví dụ: Ctr+O, Ctr+C,...
Vì vậy suy nghĩ là, làm thế nào chỉ sử dụng hai phím nhưng không xung đột với các phím chức năng, ngoài ra tay phải dễ dàng thao tác với hai phím này. Và chúng ta nghĩ ngay tới lựa chọn đó là Ctr+C+C, tức là tay chúng ta giữa phím ctr và ấn C hai lần.
Mã:
Option Explicit
Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long
Const VK_C As Long = &H43 'Phim C tren ban phim
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"
'No se kiem tra thoi diem ban nha phim C ra va an lai mot lan nua
If GetAsyncKeyState(VK_C) = 0 Then
'You have to release the key before you can press it again!
'Ban phai nha phim C ra truoc khi ban an phim C mot lan nua
keyCReleased = True
ElseIf keyCReleased Then
'Application.OnTime ensures that THIS sub finishes before the next macro starts
'Chi dinh thoi gian thuc thi macro
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
'Thiet lap phim tat Ctr+c
Private Sub SetCtrlC()
'Bind
Application.OnKey "^c", "CtrlCMacro"
End Sub
Private Sub ResetCtrlC()
'Huy bo phim tat ctr+c
Application.OnKey "^c"
End Sub
Ứng dụng của code trên làm được rất nhiều việc nếu như kết hợp với các tính năng khác ta sẽ được một công cụ tra từ điển trực tiếp trên excel.
Topic liên quan:
Bạn cần đăng nhập để thấy link
Bạn cần đăng nhập để thấy link