Вопрос по событию листа OnSelect

Автор sofi, 6 сентября 2014, 05:49

0 Пользователи и 1 гость просматривают эту тему.

sofi

Доброго всем время дня!
Уважаемые спецы по OOCalc, есть простой и бесхитростный макрос на VBA,
выдающий предупреждение, по условию, при выделении ячейки в определенном
диапазоне, то-бишь по событию WorkSheets_SelectionChange.

Sub Select_cell

Set rng = Set rng = Range("E39:E" & Cells(Rows.Count, "E").End(xlUp).Row) 'определяем рабочий диапазон оплат

If Not Application.Intersect(ActiveCell, rng.Address) Is Nothing Then

  If Cells(ActiveCell.Row, "E") <> 0 And Cells(ActiveCell.Row, "H") = 0 And Cells(ActiveCell.Row, "D") <> "ИТОГО:" Then
       
        MsgBox "Запрещено изменять сумму," & vbCrLf & "оплаты, если задолженность" & vbCrLf & _
        "за период полностью погашена!", vbExclamation, "Важное сообщение!"
 
  End If

End If
End Sub

Проблема в том, что если повесить данный макрос, в OOCalc, на событие листа OnSelect, то
логика срабатывает, т.е. предупреждение вылазит, НО ПРИ ДВИЖЕНИИ МЫШОЙ
продолжают выделяться смежные, с проверяемой, ячейки, даже находящиеся за
пределами рабочего диапазона макроса!
И это при наличии открытого окна MsgBox, что в VBA исключено!
Получается, какой-то немодальный MsgBox!
Как победить, это чудо?
Или помогите плз. переписать макрос на VB! ???
Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!

Hasim

Ни хрена не понял, кроме того, что на VBA не работает.
Файл выложить невмоготу?

rami

#2
Цитата: sofi от  6 сентября 2014, 04:49Как победить, это чудо?
Чудес не бывает, поэтому они не победимы 8-)
Когда слушатель события создаётся вручную, необходим метод   disposing()  (это "успокоительное лекарство" чтобы он не нервничал :o после того,как "услышит" событие и отреагирует один раз), но в готовых событиях этот метод должен быть "из коробки". В других событиях он есть(все не проверял), а в OnSelect или нет или не работает.
Цитата: sofi от  6 сентября 2014, 04:49Или помогите плз. переписать макрос на VB! ???
Ну, это не по адресу ;D

sofi

#3
ЦитироватьНи хрена не понял, кроме того, что на VBA не работает.
На VBA, то-бишь в Excel, как раз, все замечательно работает!
А вот в OOCalc работает с выше описанными особенностями!
Файл выкладывать, смысл какой, вопрос то теоретический?!
Сейчас попробую сделать маленькую модель.

Уважаемый, rami, а можно поподробнее Вашу мысль, так сказать
для "чайника"! :'(
Кстати, если выбирать ячейку с клавиатуры, а не мышой, описанный
глюк не наблюдается!
P.S.
Rami, я Ваш файл открыть не могу! :o
Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!

Hasim

Теоретиков развелось, блин.
Теоретики в Академии Наук сидят.
А тут практика, которая не работает, вопреки теории.

rami

Цитата: sofi от  6 сентября 2014, 15:51а можно поподробнее
Я могу сделать так, что при нажатии мышкой ячейки выскочит msgbox, но если выделение ячейки сместить стрелкой, то не среагирует.
А видеопроигрыватель VLC у вас нет?

sofi

#6
Цитироватьпри нажатии мышкой ячейки выскочит msgbox, но если выделение ячейки сместить стрелкой, то не среагирует.
Все верно, макрос работает только при выделении ячеек столбца "E".
А VLC у меня нет!

P.S.
Почитал у Понтиньяка про method disposing(), ни черта не понял!!!
Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!

rami

Цитата: sofi от  6 сентября 2014, 16:36Почитал у Понтиньяка
Кто такой, почему не знаю 8-)   Правильно: Питоньяк(Andrew Pitonyak)

В приложенном файле жмите мышкой на цветные ячейки.

sofi

Rami, все работает, как надо!  :beer:

Только, что нужно подправить, чтобы работало только в Листе 3?
Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!

sofi

Ха-ха!
Rami, не все так хорошо!
Сейчас пытался встроить Ваш макрос в реальную программу,
почему-то не работает! :'(
Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!

rami

Цитата: sofi от  6 сентября 2014, 17:42Только, что нужно подправить, чтобы работало только в Листе 3?
Function MouseOnClick_mouseReleased(oEvt) As Boolean 'Кнопка отпущена
Dim oCell As Object
MouseOnClick_mouseReleased=False    ' Разрешить офису другие обработки этого события
oCell=ThisComponent.CurrentSelection
If oCell.getCellAddress().Sheet <> 2  Then Exit Function           'Если не третий лист выходим
If oCell.getImplementationName() <> "ScCellObj" Then Exit Function 'Если не одна ячейка выходим
If oCell.getCellAddress().Column=4 AND oCell.getCellAddress().Row<25 Then msgbox "Привет от мышки"
End Function

А что за "реальная программа"?

sofi

#11
Программа по расчету алиментных обязательств!
Изначально была написана на VBA и было у всех счастье,
затем, в муках, адаптирована под OOCalc,
но кое-какие сервисы и "защиты от дурака" еще не сделаны!
Чем сейчас, с Вашей помощью, и занимаюсь! :'(
Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!

sofi

Странная, какая-то фигня!
Ваш файл, переделал в реальную модель и все хорошо!
Встраиваю, тоже самое, в новый модуль программы, ничего не работает!
Ваш файл прилагаю. 
Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!

rami

Цитата: sofi от  6 сентября 2014, 18:49Странная, какая-то фигня!
Ваш файл, переделал в реальную модель и все хорошо!
Встраиваю, тоже самое, в новый модуль программы, ничего не работает!
Я кажется понял в чём проблема. Первый макрос    RegisterMouseClickHandler 'Начать слушать события от мышки  нужно запускать(один раз). У меня макрос запускается событием "Открытие файла" его можно найти в меню "Сервис"—> "Настройка"—> "События". Если выполнить второй макрос, то слушатель мышки отключится. Этот макрос не привязан.

sofi

Rami, Вы правы!
Поставил на Open File, все работает! :beer:

Пока тестировал, возник вопрос:
Можно ли доработать макрос, чтобы тот же алгоритм
выполнялся, если user двигается по ячейкам клавиатурой?

А то может получиться, что не ткнется мышой в ячейку и
введет всякую хрень!
И будет кричать, что все не работает! 
Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!