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

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

30 Ноябрь 2020, 01:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Как заставить ячейки с макросом обновляться  (Прочитано 3125 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sn_007
Участник
**
Offline Offline

Пол: Мужской
Расположение: Краснодар
Сообщений: 8

Never say never...


« Стартовое сообщение: 23 Декабрь 2015, 21:35 »

Приветствую вас, уважаемые коллеги!

У меня такая проблема.
Мой макрос записан в виде функции, которая возвращает строку в ячейку.
Так она выглядит в самой ячейке: =READTASKNAME( 0; MATCH(G1;$Tasks.$D$2:$DC$2;0 ) )

Проблема в том, что в листе Tasks (номер найденного столбца в нём передаётся в макрос) могут происходить изменения.
После этих изменений актуальность ячеек текущего листа, где вызываются макросы, пропадает - их нужно заставить пересчитаться и обновиться.
Как же заставить пересчитываться эти ячейки с макросами, если в листе Tasks произошли изменения?

(Макрос работает правильно, но он вызывается в ячейке только при повторном открытии файла или принудительном вводе этой же формулы).

Буду очень признателен за помощь!
« Последнее редактирование: 25 Декабрь 2015, 15:17 от sn_007 » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 24 Декабрь 2015, 00:36 »

Это, что ли?
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
sn_007
Участник
**
Offline Offline

Пол: Мужской
Расположение: Краснодар
Сообщений: 8

Never say never...


« Ответ #2: 24 Декабрь 2015, 11:37 »

Супер! Большое спасибо за подсказку!
Вставил себе RAND() - теперь ячейка постоянно обновляется.

Единственное: у меня остался открытым вопрос, почему же ячейка всё же не обновлялась раньше без RAND()?
Я так подозреваю, из-за того, что в формуле нет ссылок на реально изменяемый диапазон, поэтому Calc не знает, что их надо обновлять?
Правильно?

Или же причина в чём-то другом?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #3: 24 Декабрь 2015, 11:50 »

Правильно. Использовал бы в TRENERSACTS не номер колонки, а прямо ссылку на саму колонку (типа, ...+TRENERSACTS($A4;$Tasks.$B$5:$C$504)...), макрос пересчитывался бы при каждом изменении в A4 или в колонках B-C листа Tasks.
Кстати, это один из вариантов улучшения макроса, о котором ты спрашивал в соседней теме. При такой передаче параметров ты сразу же получишь в процедуре массив значений этих ячеек, не придется дергать их через GetCellByPosition
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
sn_007
Участник
**
Offline Offline

Пол: Мужской
Расположение: Краснодар
Сообщений: 8

Never say never...


« Ответ #4: 24 Декабрь 2015, 20:42 »

Огромное спасибо!
Вы мне очень помогли, поскольку это очень актуально для меня.
Кстати, а как можно отметить эту тему как "[РЕШЕНО]"?

...В принципе, я и хотел передавать в функцию сразу массив.
Но не могу понять, как потом работать с этим массивом внутри функции.

Это же передаётся ссылка на двухмерный массив...
Как тогда правильно его описать в параметрах функции, чтобы можно было работать как с массивом ячеек?
Или нужны ещё какие-то преобразования?

(Прошу прощения: просто я работаю в C#, ну и сильно изучать Basic нет времени, к сожалению. Так, хватанул немного синтаксиса и всё).
« Последнее редактирование: 24 Декабрь 2015, 20:51 от sn_007 » Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

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


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #5: 25 Декабрь 2015, 09:57 »

Вы мне очень помогли...
Во-первых, не "выкай", пожалуйста... Я же тебе "тыкаю"? Можешь отвечать взаимностью... При неформальном общении проблемы решаются быстрее
Кстати, а как можно отметить эту тему как "[РЕШЕНО]"?
Так же как и на большинстве других форумов - изменяешь своё первое сообщение, дописываешь в название темы нужное слово...
(Прошу прощения:
Во-вторых, за что извиняться-то? За то что пока чего-то не знаешь? Так уверяю тебя - это временно!
просто я работаю в C#
Ну, когда я прочитал  byref trener_name as string, byval date_col as Integer, я так и понял  Смеющийся Basic'у не нужно разжевывать какой параметр как передается: ByVal вообще-то синтаксисом предусмотрен, но используется крайне редко. Например, в рекурсивных вызовах... Главное тип параметра указать. Если не укажешь, будет по умолчанию Variant - работать будет, но мозгов откусит чуть больше и скорость будет чуть меньше... Но в большинстве случаев это не заметно.
...В принципе, я и хотел передавать в функцию сразу массив.
Но не могу понять, как потом работать с этим массивом внутри функции.
Это же передаётся ссылка на двухмерный массив...
Как тогда правильно его описать в параметрах функции, чтобы можно было работать как с массивом ячеек?
Или нужны ещё какие-то преобразования?
Ну, ты же в Студии режимом отладки пользуешься? Здесь отладчик попроще, но тоже кое-что умеет... Ты тут давеча похвалил ответ-картинку за лаконичность изложения? Ну, вот тебе ещё одна "инструкция" - как массив ячеек виден внутри функции


* Анализ переменных в Basic.png (63.34 Кб, 1071x580 - просмотрено 27 раз.)
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
sn_007
Участник
**
Offline Offline

Пол: Мужской
Расположение: Краснодар
Сообщений: 8

Never say never...


« Ответ #6: 25 Декабрь 2015, 15:19 »

(Да ты, брат, следишь за мной!) Улыбка

Спасибо тебе огромное: ты очень доходчиво всё объяснил.
И картинка эта последняя - тоже мгновенно всё расставляет на свои места.

Желаю тебе успехов!
Надеюсь, что тоже когда-нибудь смогу тебе оказаться полезным...
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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