Excel VBA – kursor myszy “hand” dla linku

1 Comment

W poprzednim wpisie pokazałem prosty (w dodatku nie mój, co wskazałem w źródle) sposób na utworzenie linku z kontrolki Label. Ale co to za link, który po najechaniu nań myszą nie zmienia jej kursora na klasyczną “rączkę”, do której wszyscy przywykliśmy?

Jak się okazuje, nie ma możliwości pokazania takiego kursora (przynajmniej do wersji Office 2003, na jakiej pracuję) z poziomu właściwości MousePointer obiektu. Ale mimo wszystko da się, jak wykazuje GHolden w wątku traktującym właśnie o tym problemie.

Wszystko, co należy zrobić, to:

  1. W module (WAŻNE: w module, a nie w kodzie naszej UserForm) zamieścić deklaracje:
Public Const IDC_HAND = 32649&
Public Const IDC_ARROW = 32512&
 
Public Declare Function LoadCursor Lib "user32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As Long
Public Declare Function SetCursor Lib "user32" (ByVal hCursor As Long) As Long
 
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
  1. Zdarzenie MouseMove interesującej nas kontrolki Label oprogramować następująco:
Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim hCur As Long
 
    hCur = LoadCursor(0, IDC_HAND)
    If (hCur > 0) Then
    SetCursor hCur
    End If
End Sub

Przetestowane, działa. Powodzenia!

One thought on “Excel VBA – kursor myszy “hand” dla linku”

Leave a Reply

Your email address will not be published. Required fields are marked *