Консультация № 67915
21.12.2006, 00:35
0.00 руб.
0 3 3
Здравствуйте! Можно ли в Excel отследить что была нажата левая или правая кнопка мыши и выполнить
свою процедуру по нажатию

Обсуждение

Неизвестный
21.12.2006, 00:50
общий
это ответ
Здравствуйте, Rewer8!
Для листа это событие BeforeRightClick
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

End Sub
Для книги:
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

End Sub
Удачи!
Неизвестный
21.12.2006, 10:16
общий
это ответ
Здравствуйте, Rewer8!
Сюда можно бы добавить отслеживание позиции курсора:

Private Sub Chart_MouseMove(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
MsgBox "X = " & X & " Y = " & Y
End Sub

Неизвестный
21.12.2006, 13:15
общий
это ответ
Здравствуйте, Rewer8!
Есть вариант(немного опасный, зато не надо привязыватся к листам или формам) - это установить мой любимый HOOK на WH_MOUSE.
см Приложение
после запуска процедуры SetHook, перхватываются: движение мыши и нажатие левой кнопки, при нажатии правой кнопки HOOK снимается.

Приложение:
Option Explicit‘объявления APIPublic Declare Function CallNextHookEx Lib "user32" _ (ByVal hHook As Long, _ ByVal nCode As Long, _ ByVal wParam As Long, _ lParam As MOUSEHOOKSTRUCT) As LongPublic Declare Function UnhookWindowsHookEx Lib "user32" _ (ByVal hHook As Long) As LongPublic Declare Function SetWindowsHookEx Lib "user32" _ Alias "SetWindowsHookExA" _ (ByVal idHook As Long, _ ByVal lpfn As Long, _ ByVal hmod As Long, _ ByVal dwThreadId As Long) As LongPublic Declare Function GetCurrentThreadId Lib "kernel32" () As LongType POINTx As Longy As LongEnd TypeType MOUSEHOOKSTRUCTpt As POINThwnd As LongwHitTestCode As LongdwExtraInfo As LongEnd TypeConst WH_MOUSE = 7Const WM_MOUSEMOVE = &H200Const WM_LBUTTONDOWN = &H201Const WM_LBUTTONUP = &H202Const WM_LBUTTONDBLCLK = &H203Const WM_RBUTTONDOWN = &H204Const WM_RBUTTONUP = &H205Const WM_RBUTTONDBLCLK = &H206Const WM_MBUTTONDOWN = &H207Const WM_MBUTTONUP = &H208Const WM_MBUTTONDBLCLK = &H209‘глобальныеPublic hHook As LongPublic Hooked As BooleanPublic Function MouseProc(ByVal nCode As Long, _ ByVal wParam As Long, _ lParam As MOUSEHOOKSTRUCT) As LongOn Error GoTo F_END Select Case wParam Case WM_MOUSEMOVE Application.StatusBar = "MOUSE MOVE: X=" & CStr(lParam.pt.x) & "; Y=" & CStr(lParam.pt.y) Case WM_LBUTTONDOWN Application.StatusBar = "LEFT BUTTON" Case WM_RBUTTONDOWN Hooked = True‘на всякий случай здесь тоже снимаем HOOK MouseProc = CallNextHookEx(hHook, nCode, wParam, lParam) Call UnhookWindowsHookEx(hHook) Exit Function End SelectF_END: MouseProc = CallNextHookEx(hHook, nCode, wParam, lParam)End FunctionPrivate Sub SetHook()‘ Set mouse hook Hooked = False hHook = SetWindowsHookEx(WH_MOUSE, _ AddressOf MouseProc, _ 0&, _ GetCurrentThreadId)‘цикл пока не установим Hooked=true в MouseProc While (Not Hooked)‘Обязательно! а то зависнем DoEvents Wend‘на всякий случай и здесьCall UnhookWindowsHookEx(hHook)End Sub
Форма ответа