|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.03.2013, 15:29 | #1 |
Форумчанин
Регистрация: 19.05.2012
Сообщений: 237
|
Как сделать так, чтоб vba функция вызываемая из ячейки запускалась всего один раз?
... а не каждый раз при открытии книги (и наступлении других событий)
ps дело в том, что функция слишком долго выполняется и если она вызывается из многих ячеек, то ждать приходится слишком долго (например при открытии документа или при изменении данных) |
07.03.2013, 16:04 | #2 |
Старожил
Регистрация: 08.02.2012
Сообщений: 2,173
|
1. Разделить этапы выполнения функции на при открытии, при изменении и т.д. - оптимизировать процесс выполнения.
2. Завести глобальную переменную, которая регулирует срабатывание макроса. Для открытия, например, можно хранить где-то дату последнего срабатывания (в какой-либо скрытой ячейке) и если текущая дата не совпадает с ней, то запускать обработку.
Правильно поставленная задача - три четверти решения.
|
07.03.2013, 16:34 | #3 | |
Форумчанин
Регистрация: 19.05.2012
Сообщений: 237
|
Цитата:
одна и та же функция vba вызывается сотни раз из сотен разных ячеек на рабочем листе например одна ячейка вызывает функцию с параметрами неделя №7, год 2013 вторая ячейка для восьмой недели, и тд |
|
07.03.2013, 16:39 | #4 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
оптимизируйте алгоритм - логику запуска и работы функции (общий вопрос - общий ответ)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
07.03.2013, 17:50 | #5 | |
Форумчанин
Регистрация: 19.05.2012
Сообщений: 237
|
Цитата:
..причем обрабатывает многократным поиском по нескольким полям в действительности не хватает всего лишь одной галочки запрещающей пересчитывать уже подсчитанные значения Последний раз редактировалось RISagitov; 07.03.2013 в 17:57. |
|
07.03.2013, 18:09 | #6 |
Форумчанин
Регистрация: 24.12.2012
Сообщений: 906
|
RISagitov, вот так можно отключать пересчёт формул:
|
07.03.2013, 18:19 | #7 |
Форумчанин
Регистрация: 19.05.2012
Сообщений: 237
|
|
07.03.2013, 18:33 | #8 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,166
|
Думал не получится... Но получилось, правда не совсем как заказывали - срабатывает один раз за сеанс.
Код:
Но вообще лучше бы свой код написали чтоб не тормозило - на 90% уверен что написан неоптимально. P.S. Если будут аналогичные формулы в разных одинаковых книгах - то не знаю... Тогда добавить в критерий ещё и полное имя книги, а объявление переменной перенести в personal.xls. Возможно... Не тестил.
webmoney: E265281470651 Z422237915069 R418926282008
Последний раз редактировалось Hugo121; 07.03.2013 в 18:43. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как сделать чтоб запускалась нужная форма проекта | Federer | Помощь студентам | 6 | 07.11.2012 08:39 |
Как сделать так чтоб разграниченные ячейки не считались заполненными | Zlodeyatel | Microsoft Office Excel | 4 | 24.09.2012 23:25 |
как сделать так что бы первая операция вызывалась лишь один раз? | phasha | Помощь студентам | 8 | 24.10.2011 13:53 |
Как сделать так,чтобы программа запускалась с включением компьютера? | InseR | Общие вопросы Delphi | 24 | 12.02.2008 18:55 |
Как сделать, чтобы программа запускалась один раз, т.е. повторно запустить нельзя??? | Kamikadze_666 | Безопасность, Шифрование | 7 | 31.07.2007 08:34 |