Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

23 Июль 2018, 09:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Вопрос по событию листа OnSelect  (Прочитано 3953 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sofi
Пользователь
**
Offline Offline

Пол: Мужской
Расположение: Ижевск
Сообщений: 63

Глядя на мир, нельзя не удивляться!


« Стартовое сообщение: 6 Сентябрь 2014, 04:49 »

Доброго всем время дня!
Уважаемые спецы по 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! Непонимающий
« Последнее редактирование: 6 Сентябрь 2014, 15:58 от sofi » Записан

Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!
Hasim
Ветеран
*****
Offline Offline

Сообщений: 754


Woe from wit


« Ответ #1: 6 Сентябрь 2014, 14:20 »

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

Пол: Мужской
Сообщений: 2 502


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #2: 6 Сентябрь 2014, 14:36 »

Как победить, это чудо?
Чудес не бывает, поэтому они не победимы Крутой
Когда слушатель события создаётся вручную, необходим метод   disposing()  (это "успокоительное лекарство" чтобы он не нервничал Шокирован после того,как "услышит" событие и отреагирует один раз), но в готовых событиях этот метод должен быть "из коробки". В других событиях он есть(все не проверял), а в OnSelect или нет или не работает.
Или помогите плз. переписать макрос на VB! Непонимающий
Ну, это не по адресу Смеющийся

* Событие OnSelect.avi (99.46 Кб - загружено 9 раз.)
« Последнее редактирование: 6 Сентябрь 2014, 14:45 от rami » Записан

sofi
Пользователь
**
Offline Offline

Пол: Мужской
Расположение: Ижевск
Сообщений: 63

Глядя на мир, нельзя не удивляться!


« Ответ #3: 6 Сентябрь 2014, 15:51 »

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

Уважаемый, rami, а можно поподробнее Вашу мысль, так сказать
для "чайника"! Плачущий
Кстати, если выбирать ячейку с клавиатуры, а не мышой, описанный
глюк не наблюдается!
P.S.
Rami, я Ваш файл открыть не могу! Шокирован
« Последнее редактирование: 6 Сентябрь 2014, 16:06 от sofi » Записан

Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!
Hasim
Ветеран
*****
Offline Offline

Сообщений: 754


Woe from wit


« Ответ #4: 6 Сентябрь 2014, 16:06 »

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

Пол: Мужской
Сообщений: 2 502


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #5: 6 Сентябрь 2014, 16:19 »

а можно поподробнее
Я могу сделать так, что при нажатии мышкой ячейки выскочит msgbox, но если выделение ячейки сместить стрелкой, то не среагирует.
А видеопроигрыватель VLC у вас нет?
Записан

sofi
Пользователь
**
Offline Offline

Пол: Мужской
Расположение: Ижевск
Сообщений: 63

Глядя на мир, нельзя не удивляться!


« Ответ #6: 6 Сентябрь 2014, 16:36 »

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

P.S.
Почитал у Понтиньяка про method disposing(), ни черта не понял!!!
« Последнее редактирование: 6 Сентябрь 2014, 16:43 от sofi » Записан

Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 502


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #7: 6 Сентябрь 2014, 17:14 »

Почитал у Понтиньяка
Кто такой, почему не знаю Крутой   Правильно: Питоньяк(Andrew Pitonyak)

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

* Клик мышкой.ods (11 Кб - загружено 10 раз.)
Записан

sofi
Пользователь
**
Offline Offline

Пол: Мужской
Расположение: Ижевск
Сообщений: 63

Глядя на мир, нельзя не удивляться!


« Ответ #8: 6 Сентябрь 2014, 17:42 »

Rami, все работает, как надо!  Всё хорошо

Только, что нужно подправить, чтобы работало только в Листе 3?
Записан

Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!
sofi
Пользователь
**
Offline Offline

Пол: Мужской
Расположение: Ижевск
Сообщений: 63

Глядя на мир, нельзя не удивляться!


« Ответ #9: 6 Сентябрь 2014, 17:52 »

Ха-ха!
Rami, не все так хорошо!
Сейчас пытался встроить Ваш макрос в реальную программу,
почему-то не работает! Плачущий
Записан

Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 502


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #10: 6 Сентябрь 2014, 18:03 »

Только, что нужно подправить, чтобы работало только в Листе 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
Пользователь
**
Offline Offline

Пол: Мужской
Расположение: Ижевск
Сообщений: 63

Глядя на мир, нельзя не удивляться!


« Ответ #11: 6 Сентябрь 2014, 18:15 »

Программа по расчету алиментных обязательств!
Изначально была написана на VBA и было у всех счастье,
затем, в муках, адаптирована под OOCalc,
но кое-какие сервисы и "защиты от дурака" еще не сделаны!
Чем сейчас, с Вашей помощью, и занимаюсь! Плачущий
« Последнее редактирование: 6 Сентябрь 2014, 18:25 от sofi » Записан

Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!
sofi
Пользователь
**
Offline Offline

Пол: Мужской
Расположение: Ижевск
Сообщений: 63

Глядя на мир, нельзя не удивляться!


« Ответ #12: 6 Сентябрь 2014, 18:49 »

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

* Событие ВЫБОР ЯЧЕЙКИ под условием.ods (12.48 Кб - загружено 12 раз.)
Записан

Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 502


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #13: 6 Сентябрь 2014, 19:14 »

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

sofi
Пользователь
**
Offline Offline

Пол: Мужской
Расположение: Ижевск
Сообщений: 63

Глядя на мир, нельзя не удивляться!


« Ответ #14: 6 Сентябрь 2014, 19:44 »

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

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

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

Правильно поставленный вопрос, на 50% предполагает правильный ответ!
А, если автоматизировать бардак, то получится автоматизированный бардак!
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!