Страницы: 1
RSS
"Отловить" событие ЛКМ
 
Здравствуйте!
Мне необходимо в макросе отловить событие щелчка по ячейке левой кнопкой мыши. Подскажите, пожалуйста, как оно описывается в VBA. По поиску не смог ничего найти.
Спасибо!
 
Сработает Worksheet_SelectionChange, но это событие сработает и в том случае, если активируем ячейку каким-либо другим способом.
 
Юрий М,
Спасибо Вам за помощь, но есть нюанс. Мне не хотелось бы что бы событие отрабатывало на выделение ячейки при помощи клавиш клавиатуры, как Вы справедливо заметили, а срабатывало только при нажатии ЛКМ на ячейке.
Изменено: iba2004 - 13.06.2013 10:04:23
 
А как такой вариант:
в момент Worksheet_SelectionChange смотреть где находится курсор мыши.
Код
Private Type POINTAPI 
    X As Long 
    Y As Long 
End Type 

Private Declare Function GetCursorPos _ 
        Lib "user32.dll" (lpPoint As POINTAPI) As Long 

Private Sub GetRangeFromPoint() 
    Dim iPOINT As POINTAPI, iCell As Range 

    GetCursorPos iPOINT 

    Set iCell = ActiveWindow.RangeFromPoint(X:=iPOINT.X, Y:=iPOINT.Y) 

    If Not iCell Is Nothing Then 
       MsgBox "Курсор мышки находится над " & _ 
       iCell.Address(External:=True), vbExclamation, "" 
    Else 
       MsgBox "Курсор мышки находится вне ячеек рабочего листа", , "" 
    End If 
End Sub

ссыль

и если там где надо, то обрабатывать событие
Учимся сами и помогаем другим...
 
ber$erk,
Простите, если я правильно понял, то описание диапазона в котором должно срабатывать (как у меня сейчас) выделение ячейки по Worksheet_SelectionChange(ByVal Target As Range) у меня описано при помощи If Not Intersect ... Is Nothing. А вот то, каким образом мы вошли в этот диапазон: клавишами или ЛКМ я не могу отловить. Или я не о том?
Спасибо Вам за помощь.
Вот нашёл событие Worksheet_BeforeRightClick.
Попробую с ним поковыряться.  :)
Изменено: iba2004 - 13.06.2013 10:28:18
 
вот что я хотел сказать
Учимся сами и помогаем другим...
 
Цитата
iba2004 пишет:
Вот нашёл событие   Worksheet_BeforeRightClick  .
Там ещё есть ДаблКлик ))
 
Юрий М,
Да, Вы правы! LeftClick и RightClick различаются. То, что работает по ПКМ, по ЛКМ не хочет.  :)
 
ber$erk,
ЗдОрово! Простите, что сразу Вас не понял, не хватило знаний. На первый взгляд, действительно то, что мне нужно. Спасибо Вам за помощь.
Всех участников топика тоже хочу поблагодарить за помощь.
Спасибо!
 
Кажется, сообразил: событие наступает тогда, когда координаты активной ячейки будут совпадать с координатами курсора мыши. Сбои, конечно, возможны, но их процент очень невелик. Спасибо! Но появилась проблема: как в IF описать, что это событие произошло НЕ при помощи нажатия ПКМ, потому как на ПКМ тоже срабатывает? Или необходимо открыть новую тему?
Спасибо!
 
На это событие повесить "метку", которая будет говорить, что отрабатывать не надо.
Учимся сами и помогаем другим...
 
ber$erk,
У меня на этот счёт есть только одна идея. Макрос Worksheet_BeforeRightClick проставляет в одну из ячеек листа, например, 1 и далее при работе Worksheet_SelectionChange мониторить эту ячейку на предмет наличия в ней 1: если она есть, то событие ПКМ было, если нет – то не было. В том случае, если ход моих мыслей верен и эту проблему нельзя решить по-другому, подскажите, пжл, как можно при нажатии ПКМ и, как следствие, изменении выделенных ячеек, запустить первым для обработки макрос Worksheet_BeforeRightClick, а только затем исполнение Worksheet_SelectionChange? Или это "кривой" путь? Я не могу сообразить как на это событие повесить метку по-другому.
Спасибо!
Изменено: iba2004 - 13.06.2013 18:58:48
 
Именно про такой путь я и думал. Оказывается последовательность этих событий не подходит под решение задачи  :(  надо думать дальше
Учимся сами и помогаем другим...
 
Цитата
iba2004 пишет:
запустить первым для обработки макрос Worksheet_BeforeRightClick, а только затем исполнение Worksheet_SelectionChange
Событие SelectionChange наступит раньше. А что Вы к нему "привязались"? Используйте просто ДаблКлик, например.
 
Юрий М,
Я правильно Вас понял: вместо SelectionChange использовать DoubleClick?
 
Ну да! Кликнули дважды по ячейке - наступило событие и выполняются какие-то действия. А если активировали эту ячейку с клавиатуры - ничего не произойдёт. Только перед выходом из процедуры не забудьте написать Cancel = True (отменим режим редактирования в который попадаем при даблклике). Можно и событие правый клик использовать без всякой привязки к SelectionChange.
 
Юрий М,
Спасибо! Попробую реализовать.
Страницы: 1
Читают тему
Наверх