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

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

18 Сентябрь 2019, 18:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: EnableEvents = True/False в OOCalc  (Прочитано 6878 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sofi
Форумчанин
***
Offline Offline

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

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


« Стартовое сообщение: 12 Июль 2014, 22:05 »

Еще раз всем привет!

Подскажите, пж, есть ли в OOCalc подобие VBA
EnableEvents = True/False ?

Если нет, то каким образом можно заблокировать событие листа
на изменение содержания диапазона ячеек во время выполнения
другой процедуры на этом же листе?
Записан

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

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 12 Июль 2014, 22:31 »

Автоматический перерасчет можно запретить кодом:   ThisComponent.enableAutomaticCalculation(False) , а разрешает True
Это то что нужно?
Записан

sofi
Форумчанин
***
Offline Offline

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

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


« Ответ #2: 12 Июль 2014, 22:53 »

К сожалению это не то!

EnableEvents в VBA прерывает выполнение какого-либо события.

В моем случае на листе установлен расширенный фильтр,
срабатывающий на событие листа "изменение содержания ячеек",
поскольку, критерии фильтрации в контролируемые ячейки поступают разнесенными во времени, то
чтобы исключить ложные срабатывания фильтра, необходимо заблокировать
выполнение события листа пока не установятся все критерии фильтрации!
Во как!

Записан

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

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #3: 12 Июль 2014, 23:25 »

Я вероятно, не понимаю всего что вы хотите сделать, я бы просто назначил клавишу или кнопку макросу без привязки к событию.
Записан

sofi
Форумчанин
***
Offline Offline

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

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


« Ответ #4: 12 Июль 2014, 23:34 »

Так оно и есть, висит на кнопке!
Но хочется изящнееееее!

Изначально макросы были написаны в VBA Excel и было всем счастье,
пока "оченьььььь умные" люди не распорядились снести MS и
поставить халявный OOCalc.
И плевать, что годами все работало, зато халява!
Вот сижу и "дра...... в присядку" пытаясь переписать макросы!
Во как! Россея!!!
 
Записан

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

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #5: 12 Июль 2014, 23:59 »

Я просто не вижу изящества. Если бы речь шла об одном критерии в конкретной ячейке, можно было бы поставить событие на одну эту ячейку, но критериев должно быть много и отключать события не лучше, чем включить макрос когда нужно.
Записан

sofi
Форумчанин
***
Offline Offline

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

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


« Ответ #6: 13 Июль 2014, 06:14 »

Да я все так и сделал, как Вы сейчас предлагаете, объединил макросы,
повесил на кнопку и все работает.
Мне просто для общего развития интересно, если разработчики
предусмотрели различные события листа, значит должен быть
метод их прерывания на время выполнения других процедур с этим листом.
Все, что мог, перерыл, но не нашел.
Может не туда смотрел! Шокирован
Вот и решил задать вопрос на форуме.
Правда, никто, ничего, пока не ответил Плачущий

P.S.
Я полагаю, что модульный принцип построения программы
как раз и делает ее более гибкой.
А городить все в один макрос не есть хорошо!
При серьезном алгоритме получается громоздко и нечитабельно,
особенно не разработчику!
« Последнее редактирование: 13 Июль 2014, 08:28 от sofi » Записан

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

Сообщений: 754


Woe from wit


« Ответ #7: 13 Июль 2014, 21:11 »

Выбирая "События листа" вы не включаете/отключаете события, а устанавливаете собственный макрос-обработчик этого события.
Устанавливать этот макрос-обработчик можно программно, также как и удалять его.
Так что, можно вместо EnableEvents=True программно повесить нужный макрос на нужное событие, а вместо EnableEvents=False макрос с этого события удалить.
Записан
sofi
Форумчанин
***
Offline Offline

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

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


« Ответ #8: 13 Июль 2014, 21:49 »

И то верно!
А как это сделать в Calc?
Будте добры примерчик какой-нибудь, а то
Calc, для меня, как и Help по нему, тоска, почти полная! Шокирован
Записан

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

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

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


« Ответ #9: 14 Июль 2014, 04:25 »

Большое, Вам человеческое спасибо! Попробуем! Всё хорошо
« Последнее редактирование: 14 Июль 2014, 04:39 от sofi » Записан

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

Сообщений: 754


Woe from wit


« Ответ #10: 14 Июль 2014, 10:32 »

Можно, конечно, поступить проще - использовать глобальную переменную как "флаг" выполнения блока кода для обработки события, если нужно его обработать.
Например, Global flag As Integer.
А на событие листа "Содержимое изменено" повесить постоянно макрос EventEnableDisable, в котором блок кода обработки события выполняется только при определенном значении глобальной переменной, например, при flag=666, которое устанавливается в другой подпрограмме после проверки готовности к выполнению обработки события.
Как-то так:
Sub EventEnableDisable
  If flag=666 Then
    .......... 'код для обработки события
    flag=0
  End If
End Sub
Записан
sofi
Форумчанин
***
Offline Offline

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

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


« Ответ #11: 14 Июль 2014, 17:39 »

Так, действительно изящнее, попробуем!
Основные VBA макросы я уже приспособил под Calc,
так что есть время для экспериментов, будь они не ладны!
Извините пж, а не подскажите какую-нибудь ЧЕЛОВЕЧЕСКУЮ
литературу по программированию в Calc? (Понтиньяк есть)
А то, все, что нахожу, носит крайне отрывочный характер,
да к тому же с ошибками. Да уж...
К сожалению, данный форум тоже не оправдывает ожиданий,
как информресурс, во всяком случае, по сравнению с Планета Excel.  
Записан

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

Пол: Мужской
Расположение: Finland
Сообщений: 793



WWW
« Ответ #12: 14 Июль 2014, 18:11 »

Извините пж, а не подскажите какую-нибудь ЧЕЛОВЕЧЕСКУЮ
литературу по программированию в Calc? (Понтиньяк есть)

Типа "VBA для чайников"? Такого не видел. Понтиньяк считается классикой объяснений на примерах.
Так же примеры есть тут
По Uno кое что можно найти тут. У них ещё была вменяемая справка по UNO на русском, но сейчас что-то не могу найти.

Для ЛО: тут примеры,а  тут полный перечень API с объяснениями
Записан

(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha
sofi
Форумчанин
***
Offline Offline

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

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


« Ответ #13: 14 Июль 2014, 18:58 »

Спасибо, будем грызть гранит науки! Подмигивающий
Записан

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

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

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


« Ответ #14: 17 Август 2014, 07:39 »

Доброго всем время дня!

Ранее в этой теме уважаемый Hasim писал, как "повесить"
програмно код на событие листа "Change" т.е.
Цитата:
ThisComponent.Sheets.getByName("Лист1").Events.ReplaceByName("OnChange", mEventProps())

Подскажите пж, а как сделать тоже самое на событие "SelectionChange", т.е.
"Выделенная область изменена"

Заранее респект и уважуха! Да уж...
Записан

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

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