Помогите !!! автоматическое добавление даты...

Автор ForumOOo (бот), 7 июня 2011, 17:34

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

JohnSUN

Бр-р-р... Действительно, что-то пошло не так...
Я тут просто глянул по коду чуть вверх - комментарий "в данном случае А1:А101", цикл под этим комментарием G8:G20... Расскажешь про задачу подробнее? А то ведь в самом начале спросил про B3, а делать пытаешься для другого диапазона, путаница выходит.
А по смыслу ошибки что можно сказать? В тот момент когда дело дошло до вызова ChartDataChanged в переменной oEvent уже (или ещё) ничего не было.
Такое могло случиться, если ты попытался скрестить в пределах одного документа оба способа перехвата событий - от листа и от данных...
В общем, лучше всего будет приложить к следующему сообщению образец этого твоего "расчета стоимости оформления" - когда обсуждаем не куски кода, а готовый документ, решение находится быстрее.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Yelik

Я профан в макросах . Скопировал пример , поменял строки по которым отслеживается изменение на G8:G20 и... ошибка. Файл во вложении.

rami

Цитата: JohnSUN от  9 апреля 2015, 08:35Такое могло случиться, если ты попытался скрестить в пределах одного документа оба способа перехвата событий - от листа и от данных...
Всё может быть O0, но я сильно сомневаюсь, что такое возможно. У меня и этот макрос и события листа и формулы — всё действует одновременно и без проблем. Не смог воспроизвести ошибку :-\ Что я делаю не так ???

rami

Удалите событие листа и выполните макрос addListener — он будет слушать событие и запускать макрос OOO_chartDataChanged(oEvent). А то у вас получается "Коктейль Молотова" :o

Yelik

Событие удалил. Запускаю макрос addListener и ничего не происходит(ошибки тоже нет). Кстати, просит установить Java(JRE), возможно поэтому ничего и не происходит?

rami

#35
Цитата: Yelik от  9 апреля 2015, 09:19Запускаю макрос addListener и ничего не происходит
Происходит, назначается слушатель события. Кстати, выполнять этот макрос нужно всего один раз — он действует до закрытия документа или до удаления слушателя. Обычно запуск слушателя назначается на открытие документа.

Событие — это изменение ячеек G8:G20, которое происходит при пересчёте формул. Чтобы произошёл пересчёт, нужно изменить хотя бы одну ячейку из восьмой строки(параметры рамы)

Yelik

Вот как виглядит у меня. Gif анимированный.

JohnSUN

Да нет, всё должно работать...
Хотел о другом спросить - а на зачем? Ну, вот вся эта бодяга с установкой времени самого последнего изменения каждого из полей данных?
Как я понимаю, после занесения всех-всех данных этот листок будет распечатан в двух экземплярах и именно дата-время печати должна светится в ячейке B3? Почему в таком случае мы не можем просто написать туда =NOW()?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Yelik

Цитата: JohnSUN от  9 апреля 2015, 12:58
Да нет, всё должно работать...
Хотел о другом спросить - а на зачем? Ну, вот вся эта бодяга с установкой времени самого последнего изменения каждого из полей данных?
Как я понимаю, после занесения всех-всех данных этот листок будет распечатан в двух экземплярах и именно дата-время печати должна светится в ячейке B3? Почему в таком случае мы не можем просто написать туда =NOW()?
Чтобы при открытии файла не изменялась дата. Какая может быть ещё причина, что у меня не работает addListener?

JohnSUN

Ну, причины могут быть самые разные... Например, уровень безопасности макросов... Хоть какой-то макрос выполняется? Ну, например, при запуске addListener выскакивает сообщение с картинки? Я не стебусь, я на полном серьёзе - я же не знаю пока твой уровень! У нас тут иногда совсем неподготовленные товарищи помощь получают. А то ведь в твоей гифке сам процесс активизации слушателя событий не показан...
А по поводу
Цитата: Yelik от  9 апреля 2015, 13:04
Чтобы при открытии файла не изменялась дата.
Давай уточним - какая именно дата должна зафиксироваться в B3? Дата сохранения, дата печати, дата создания?.. В свойствах документа этих дат как миллионеров во Флориде... и ещё добавить можно, в пользовательских свойствах... И выдернуть в нужную ячейку именно её (дату из свойств) - гораздо проще... Опять же, как уберечься от нечаянного изменения даты при повторном открытии файла?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Проблема в том, что в LibreOffice 4.4.2.2 слетает слушатель событий после первого применения, при повторном выполнении макроса addListener он работает как надо. Проверил в Apache OpenOffice 4.1.0 такой проблемы нет.

Yelik в любом случае макросы надо упростить и выбросить из них всё не нужное.

Стоит подумать о предложении JohnSUN

Проверьте мой вариант (если в LibreOffice, то учитывайте проблему). Какие офисы у вас?

Yelik

Цитата: JohnSUN от  9 апреля 2015, 13:20
Ну, причины могут быть самые разные... Например, уровень безопасности макросов... Хоть какой-то макрос выполняется? Ну, например, при запуске addListener выскакивает сообщение с картинки? Я не стебусь, я на полном серьёзе - я же не знаю пока твой уровень!
Уровень безопасности Средний.
А мой уровень по макросах = 0 :roll:

Цитата: rami от  9 апреля 2015, 13:38
Проблема в том, что в LibreOffice 4.4.2.2 слетает слушатель событий после первого применения, при повторном выполнении макроса addListener он работает как надо. Проверил в Apache OpenOffice 4.1.0 такой проблемы нет.

Yelik в любом случае макросы надо упростить и выбросить из них всё не нужное.

Стоит подумать о предложении JohnSUN

Проверьте мой вариант (если в LibreOffice, то учитывайте проблему). Какие офисы у вас?
У меня LibreOffice 4.4.1.2, WinXP Pro SP3. Кстати ваш вариант работает, НО надо выполнить макрос addListener вручную.

rami

Цитата: Yelik от  9 апреля 2015, 13:48Уровень безопасности Средний.
А мой уровень по макросах = 0 :roll:
В данном случае это не важно, проблема в LibreOffice
Цитата: Yelik от  9 апреля 2015, 13:48У меня LibreOffice 4.4.1.2, WinXP Pro SP3. Кстати ваш вариант работает, НО надо выполнить макрос addListener вручную.
Я проверил эта проблема есть начиная с LibreOffice 4.3 и позже. В LibreOffice 4.2.8 и в Apache OpenOffice 4.1.0 слушатели событий не слетают. Так что, надо или перейти на предыдущие версии, или запускать слушателя вручную, или искать другие варианты решения задачи.

Yelik

Цитата: rami от  9 апреля 2015, 16:01
Я проверил эта проблема есть начиная с LibreOffice 4.3 и позже. В LibreOffice 4.2.8 и в Apache OpenOffice 4.1.0 слушатели событий не слетают. Так что, надо или перейти на предыдущие версии, или запускать слушателя вручную, или искать другие варианты решения задачи.
А какие ещё могут быть варианты?

rami

#44
Цитата: Yelik от  9 апреля 2015, 14:23А какие ещё могут быть варианты?
Присоединяюсь к вопросам JohnSUN:
Цитата: JohnSUN от  9 апреля 2015, 11:20Давай уточним - какая именно дата должна зафиксироваться в B3? Дата сохранения, дата печати, дата создания?.. В свойствах документа этих дат как миллионеров во Флориде... и ещё добавить можно, в пользовательских свойствах... И выдернуть в нужную ячейку именно её (дату из свойств) - гораздо проще... Опять же, как уберечься от нечаянного изменения даты при повторном открытии файла?
В зависимости от условий задачи решение может быть очень разным.