[РЕШЕНО] Как заставить ячейки с макросом обновляться

Автор sn_007, 23 декабря 2015, 21:35

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

sn_007

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

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

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

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

Буду очень признателен за помощь!

JohnSUN

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

sn_007

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

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

Или же причина в чём-то другом?

JohnSUN

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

sn_007

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

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

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

(Прошу прощения: просто я работаю в C#, ну и сильно изучать Basic нет времени, к сожалению. Так, хватанул немного синтаксиса и всё).

JohnSUN

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

sn_007

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

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

Желаю тебе успехов!
Надеюсь, что тоже когда-нибудь смогу тебе оказаться полезным...