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