![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 14.05.2011
Сообщений: 37
|
![]()
Господа, есть такой вопрос. В талмуде Уокенбаха (Ексел 2010 проф. программирование на VBA) имеется такой кусок:
Use arguments, not cell referencesТак складывается ситуация, что нужно сделать функцию именно со ссылками на ячейки с некоторыми константами (их около 100, очень не хочу вводить их аргументами). Не могу понять, Уокенбах говорит, что оно работает, даже приводит пример, но в то же время предупреждает но в отдельных случаях может не работать? Вопрос - В КАКИХ? Заранее спасибо если кто знает. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 31.12.2010
Сообщений: 2,133
|
![]()
Попробуйте в новой книге ввести первую функцию, т.е. =DoubleCell() в яч. А2 и менять ячейку А1. Ячейка А2 не меняется! Потому что Excel не видит явной зависимости функции от А1, ведь у нее нет аргументов.
В случае с константами такой опасности нет, но есть другая. Выражение Range("A1") относится к активному листу. Если функция введена на несколько листов, то при пересчете книги функции на всех листах используют значение А1 активного листа (а не того, с которого вызваны). Присвойте ячейкам с константами имена, используйте в VBA как [Имя].
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
|
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]() Цитата:
Код:
Чем шире угол зрения, тем он тупее.
|
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 25.02.2012
Сообщений: 166
|
![]()
не всё что "можно", однако же "нужно".
такой замечательный способ приведёт к пересчёту функции при каждом изменении на любом листе любой открытой книги и не только - например, при изменении условий автофильтра функция тоже будет вызываться на пересчёт. что даже при не слишком большом количестве вызовов затормозит Excel "неподеццки". ![]() |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 14.05.2011
Сообщений: 37
|
![]()
2 Казанский
Спасибо. Собственно, мне было известно, что функция пересчитывается только при изменении аргумента. Для моей задачи это вполне подходит и учтено в решении. Сбило с толку описание с неопределенностями "at times", "may return"... Как будто описывается какой-то плавающий плохо воспроизводимый баг. Почему бы не сказать просто и четко - пересчет только по изменению аргументов. Опционально - через application.volatile. В данной ситуации, думаю, можно сделать вывод, что формулировка "Excel’s calculation engine can’t account for ranges in your code that aren’t passed as arguments" просто не точно отражает суть. Точным будет вариант "Excel’s calculation engine can’t account for changes in ranges in your code that aren’t passed as arguments". В русской версии это изложено, кстати, еще хуже - "иногда перед возвратом функцией значения не вычисляются все связанные величины". |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Excel2007 не вставляет ссылки на ячейки из другой книги | ABCSamara | Microsoft Office Excel | 8 | 07.06.2012 16:56 |
замена названия ссылки в ячейки | bize | Microsoft Office Excel | 6 | 14.01.2012 15:11 |
зависимость ссылки от ячейки | ramzan_s | Microsoft Office Excel | 5 | 24.07.2011 02:02 |
Использование параметров ячейки во вновь созданной ссылки на данную ячейку | offza | Microsoft Office Excel | 2 | 20.07.2011 13:07 |
Ссылки на ячейки через несколько строк | Marcellus | Microsoft Office Excel | 6 | 20.08.2008 08:53 |