Страница: 1 |
Страница: 1 |
Вопрос: MyFunc(i) не обновляется!!!
Добавлено: 08.03.06 03:20
Автор вопроса: XL
Господа, есть некая (простенькая) MyFunc(i as Integer). Ей передается число i, она идет в строку i и столбец с=const и возвращает строковое значение, которое в данный момент записано в Cells(i, c). При этом в самой ячейке (i,c) стоит формула из стандартных функций Экселя (комбинация всяких Если, ВПР и пр.). Т.е. в результате каких-то удаленных манипуляций (но на том же листе) значение в ячейке меняется. Может быть "Иванов", а потом что-то изменилось - стало "Петров".
К сожалению, MyFunc() не меняет Иванова на Петрова! Т.е. когда ее вставляешь в ячейку впервые, она правильно отображает то, что в этот момент является значением ячейки. А потом значение аргумента меняется, т.е. результат вычисления по формуле в ячейке-аргументе меняется, а функция не понимает, что ей нужно пересчитаться.
В Эксель-97 вроде работал метод копи+пэйст всего диапазона ячеек-аргументов на себя, но на работе с новым Экселем не работает. Так же не спасает передача фунции значения ячейка.Value и .Value2 .
Один метод работает: я выделяю весь рэндж, где есть MyFunc (их много у меня) и тупо процедурой замещаю формулу "=MyFunc()" на "=0", а затем опять вписываю формулу. При этом функция пересчитывается. Занимает времени одну лишнюю секунду, но ведь это маразм? Должно быть какое-то принудительное обновление, только вот чего?
Разумеется, F9, а также его аналог в коде не работают (((
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 08.03.06 05:32
Функции excel - что абсолютно правильно - пересчитываются только тогда, когда меняется их аргумент.
Если сделать аргументом функции нормальную ячейку, а не её строку, всё будет пересчитываться.
Если сделать аргументом функции номер строки, а также весь диапазон, в который может входить искомая ячейка - всё будет пересчитываться.
Это два нормальных варианта.
Ненормальный вариант - в тело функции включить
Номер ответа: 2
Автор ответа:
SvetlanaL
ICQ: 229-356-346
Вопросов: 8
Ответов: 20
Профиль | | #2
Добавлено: 22.03.06 09:23
Почему application.volatile ненормальный вариант.
Номер ответа: 3
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #3
Добавлено: 22.03.06 09:47
Потому что в сотню ячеек такую функции введи и начни работать с книгой. Данные там вводить etc. И при каждом измении каждой ячейки будут пересчитываться все функции во всей книге. Мечта машинистки - попивать кофе в промежутках между нажатиями клавиши enter...
Номер ответа: 4
Автор ответа:
SvetlanaL
ICQ: 229-356-346
Вопросов: 8
Ответов: 20
Профиль | | #4
Добавлено: 22.03.06 13:08
Но, а если функция используется один раз в книге, например, СУММАПРОПИСЬЮ. Вполне реально.