- В этой теме 7 ответов, 5 участников, последнее обновление 06.03.2006 в 09:19 сделано DragonFly.
-
АвторСообщения
-
- Всего сообщений: 12234
почему это мерзкая тварь не обновляет пользовательскую функцию при изменении ее аргументов? В простейшем случае пишу код ВБА эф(ячейка) = «значение функции». Все считает. Потом меняю значение в ячейке, например, обнуляю ее. Значение ячейки, куда вбита эф(ячейка-аргумент) — не меняется!
Разумеется, в параметрах автоматическое вычисление, но даже явное F9 или Шит(«название листа»).Калкулейт — не спасает. Зараза не считает нужным пересчитывать пользовательскую функцию. Как-то я раньше умел с этой бедой бороться, а щаз уже спать хочу, не могу больше! 😈
hare mamburu
- Всего сообщений: 67
Макрос ошибку выдаёт? Или просто не изменяет значение ячейки?
Возможно макрос надо ещё раз запустить.NULL
Аноним
- Всего сообщений: 15414
Слушай, а формат ячейки, где аргумент живет, случайно не «текстовый»?
Я подзабыл, «пользовательская функция» — имеется в виду
некая последовательность действий, зашитых в формуле, которую ты создал САМ, так?, Или наоброт строго те три сотни что готовые, первоначальные, вызываемые мастером функций кнопой fx
Может формула настоко сложна, (с какими нить ВПРами, «еслями», «смещ»ами, что при некоторых вариантах значений аргументов возникает «экстремальные» ситуации: деление на ноль, или квадратный корень из отрицательного числа, и т.п. и Ёксель не обновляет… хотя должен писать соответствующее сообщение.
А вообще, была у меня такая беда, я заново переписал формулу -все прошло.
просто глюки Ёкселя.- Всего сообщений: 149
Private Sub Worksheet_Change(ByVal Target As Range)
Dim T1 As Double‘ E3 — входная ячейка
‘ E7 — выход
‘ MyFunc() — функция пользователяT1 = Range(«E3»).Value
Range(«E7»).Value = MyFunc(T1)
End SubПроверил — все работает
- Всего сообщений: 2001
То AS — про это же написали — на VBA все работает…)
То DF — Какой экс. вообще 8 или 9(2003)..А скоро 10 будет ) Воот там говорят ..все и будет …)- Всего сообщений: 2001
To Andrey — Точна у экса столько глюков — что проще обходить их — чем бороться … Я даже в росс.Микрософт..звонил — по тому что накопал — обещали исправить.. Пока ждем ))
- Всего сообщений: 12234
@A.S. wrote:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim T1 As Double‘ E3 — входная ячейка
‘ E7 — выход
‘ MyFunc() — функция пользователяT1 = Range(«E3»).Value
Range(«E7»).Value = MyFunc(T1)
End SubПроверил — все работает
Как это использовать?
Пока борюсь следующим образом: на листе, где изменяются аргументы (что почему-то не приводит к изменению значений) делаю
Cells.Select
Selection.Copy
ActiveSheet.PasteТ.е. тупо копирую на себя весь лист с аргументами. При этом что-то в Ехеле «щелкает» и он пересчитывает все формулы. Но это «криво», не люблю кривые фокусы в программировании. Должно быть какое-то принудительное обновление каких-нибудь кэшей или еще чего-то…
К сожалению, пока не понимаю, как можно использовать вышеуказанную процедуру. Не переписывать же для каждой ячейки с функцией такой код?
hare mamburu
- Всего сообщений: 12234
@Morfey wrote:
То AS — про это же написали — на VBA все работает…)
То DF — Какой экс. вообще 8 или 9(2003)..А скоро 10 будет ) Воот там говорят ..все и будет …)Писал програмульку дома, там старая еще Вынь 98 и старый же Ехель. Сейчас пришел на работу, тут поновее — поглядим. Вроде как нашел метод — при каждом обращении к листу она делает рефреш вышеуказанным способом (с отклучением ScreenUpdating), а чтобы изменить аргументы — надо перейти в другой лист. Изменили, вернулись вотчет — все обновилось. Но все равно дурость какая-то.
hare mamburu
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.