Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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 - что абсолютно правильно - пересчитываются только тогда, когда меняется их аргумент.

Если сделать аргументом функции нормальную ячейку, а не её строку, всё будет пересчитываться.
Если сделать аргументом функции номер строки, а также весь диапазон, в который может входить искомая ячейка - всё будет пересчитываться.

Это два нормальных варианта.
Ненормальный вариант - в тело функции включить
application.volatile
.

Ответить

Номер ответа: 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
Но, а если функция используется один раз в книге, например, СУММАПРОПИСЬЮ. Вполне реально.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам