Deteksi Num Lock dan Caps Lock dengan VBA Ecxel

CapsLock Numlock VBA Excel

Pertanyaan ini muncul dari salah satu member dalam Group Excel. Apakah bisa kita mengaktifkan Casplock dan Numlock saat membuka File Excel. Untuk menjawab pertanyaan itu, kita harus tahu dulu apakah Capslock dan Numlock dalam keadaan Aktif atau tidak. ketika kita sudah mengetahuinya maka kita bisa mengkatifkan Capslock dan Numlock dengan perintah Application.sendkeys

Untuk mengetahui posisi atau keadaan kedua tombol tersebut, kita membutuhkan sedikit bantuan dari Wins API (Application Programming Interpace).

Siapakan sebuah modul untuk menyimpan Function dari WinAPI ini. lalu copy Code dibawah ini

 Visual Basic Editor 
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long)As Integer  '// untuk Versi 64bit tambah Ptrsafe
Private Const kCapital = 20
Private Const kNumlock = 144

Public Function CapsLock() As Boolean
CapsLock = KeyState(kCapital)
End Function

Public Function NumLock() As Boolean
NumLock = KeyState(kNumlock)
End Function

Private Function KeyState(lKey As Long) As Boolean
KeyState = CBool(GetKeyState(lKey))
End Function

Untuk mengecek Kondisi Numlock dan Capslock bisa menggunakan IF contohnya

 Visual Basic Editor 
if Capslock then
    'code disimpan disini jika Casplock Aktif
end if

Implementasi

Kembali kepertanyaan diatas, dimana User menginginkan Caspslock dan Numlock Aktif saat membuka File Excel. Kita bisa menambahkan sebuah kode kode kedalam Workbook_open berupa perintah Application.onKeys . contohnya

 Visual Basic Editor 
Private sub Workbook_open()
If Not CapsLock Then   '//jika casplock tidak aktif
    Application.SendKeys "{CAPSLOCK}"
End If
If Not Numlock Then   '//jika numlock tidak aktif
    Application.SendKeys "{NUMLOCK}"
End If
End Sub

Selain untuk kasus diatas, Implementasi dari WinApi ini juga bisa kita manfaatkan untuk membuat sebuah tanda atau petunjuk pada UserForm untuk Status kondisi Numlock dan Kondisi Capslock.

Be the first to comment

Leave a Reply

Your email address will not be published.


*