czwartek, 24 maja 2012

Na start - zdarzenie lewego przycisku myszy

Od kilku dni chodziło za mną, żeby zacząć zapisywać różne makra i inne pożyteczne przykłady z użytkownia Excela i VBA (głównie VBA), zanim wylecą z głowy bądź ulegną samozniszczeniu w przypadku awarii komputera.
Zastrzegam: nie jestem specjalistą w dziedzinie VBA. Programować lubię i robię to głównie hobbystycznie, a VBA zacząłem się uczyć na potrzeby aktualnej pracy - wiedzę czerpię na bieżąco w miarę potrzeb - z kursów, tutoriali i manuala.

Nie spodziewajcie się tutaj kursów czy poradników, raczej będą to zapiski dotyczące różnych problemów, które napotkałem podczas pisania makr, ewentualnie jakieś ciekawostki. Niemniej, w odnośnikach umieściłem kilka pozycji, na które warto wg mnie rzucić okiem.


Na początek, jako pierwszy problem - zdarzenie (event) kliknięcia lewego przycisku myszy na obiekcie arkusza.. no właśnie - nie ma takiego, i w tym jest problem. Jest BeforeRightClick, jest BeforeDoubleClick, ale nie ma tego nieszczęsnego lewego..

Na problem trafiłem, kiedy pisałem z nudów (ah praca ;) mini-grę w Excelu i chciałem, aby gracz sterował tylko klawiszami, a nie myszką (czyli chciałem uniknąć klikania lewym/prawym przyciskiem po komórkach). O ile prawy nie był problemem, tak z lewym musiałem pogoogle'ować. I znalazłem taki sposób oparty na zdarzeniu SelectionChange oraz funkcji GetAsyncKeyState z biblioteki user32. Przykładowy kod:

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer


Sub Worksheet_SelectionChange(ByVal Target As Range)


If GetAsyncKeyState(1) Then
MsgBox ("Naciśnięto lewy przycisk myszy.")
End If


End Sub
Ot - cała filozofia. Funkcja zwraca wartość true lub false, w zależności, czy naciśnięto klawisz odpowiadający argumentowi. Jako argument podaje się kod klawisza (nie jest to kod ASCII klawiatury) lub odpowiadającą jemu stałą. W przypadku lewego przycisku jest to 1 lub vbKeyLButton, w przypadku prawego: 2 lub vbKeyRButton.

Pozostałe wartości można zobaczyć w Object Browser (naciskając F2 w edytorze VBA), w module KeyCodeConstants.


..i tak oto dokończyłem wpis sprzed prawie roku.


Trochę wstyd, mam nadzieję, że poprawię się i będę bardziej regularny ;)

Komentarze (0):

Prześlij komentarz

Subskrybuj Komentarze do posta [Atom]

<< Strona główna