Klawisz Scroll Lock jest klawiszem, który występuje na klawiaturach ze względów historycznych. Prawie żaden współczesny program go nie używa. Jedną z nielicznych znanych aplikacji, które go używają to Excel. Wciśnięty klawisz Scroll Lock zmienia zachowanie tej aplikacji. Gdy naciskamy np. strzałkę w dół, to kursor „schodzi” do komórki znajdującej się wiersz niżej, np. był w komórce B20 a po naciśnięciu strzałki w dół pojawia się w komórce B21.
Natomiast jeśli mamy wciśnięty klawisz Scroll Lock (jest zapalona lampka) to wtedy po naciśnięciu strzałki w dół kursor nadal zostaje w komórce B20, ale cały arkusz się przewija się o jeden wiersz w dół (czyli jeśli były wyświetlone na ekranie wiersze od 1 do 28 to będą wyświetlone wiersze od 2 do 29).
Być może czasami potrzebujesz w swojej aplikacji wykryć czy jest wciśnięty klawisz Scroll Lock. Podobnie jak w przypadku sprawdzania, czy mamy wciśnięty klawisz Num Lock jak i Caps Lock możemy skorzystać z funkcji API: GetKeyState. Jednak o dziwo dla klawisza Scroll Lock nie znalazłem predefiniowanej stałej jak to było w przypadku klawisza Num Lock (vbKeyNumlock = 144) czy Caps Lock (vbKeyCapital = 20). Tutaj musimy użyć kodu klawisza 145.
Więc nasz kod wygląda następująco:
#If VBA7 Then
Public Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As LongPtr) As Integer
#Else
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
#End If
Function ScrollLockEnabled() As Boolean
ScrollLockEnabled = (GetKeyState(145) = 1)
End Function
Pewnie zastanawiasz się, skąd wyczarowałem kod klawisza Scroll Lock 145. Otóż można albo znaleźć w Internecie, albo można zachować się jak rasowy programista, czyli napisać kilka linijek kodu. Proponuję utworzyć pusty formularz (UserForm) a na niego nanieść etykietę Label i nadać jej nazwę lblKodKlawisza, i na szybko napisać taki kod:
Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
lblKodKlawisza.Caption = KeyAscii
End Sub
W ten oto prosty sposób można poznać kod dowolnego wciśniętego klawisza.