none
Автопересчет пользовательских функций RRS feed

  • Вопрос

  • В модуле объявляю пользовательскую функцию:

    Public Function mysumm()
    mysumm = Cells(1, 1) + Cells(1, 2)
    End Function

    Вставляю  через меню "Вставка" эту функцию в клетку, например, B5 и, изменяя содержимое клеток Cells(1, 1) и Cells(1, 2), ожидаю, что функция сработает автоматически и посчитает сумму? однако, этого не происходит. Функция работает только в момент ввода или F2-Enter.
    Вопросы:
    1. это невозможно?
    2. мне не хватает знаний?
    3. как заставить пользовательскую функцию листа автоматически пересчитываться при изменении содержания зависимых полей?

    Функцию листа =СУММ(A1;B1) не предлагайте, пожалуйста. Я для простоты упростил пример, а реальная задача намного сложнее.
    Я пробовал во всех версиях Excel вплоть до 2007.
    Буду  очень благодарен за любой ответ.
    Владимир.
    моб +7 903 6688938
    vshullman@mail.ru

    • Изменено LoveExcel 17 июля 2009 г. 14:33 недосмотр
    17 июля 2009 г. 14:30

Ответы

  • Владимир,

    1) Мне очень жаль, но это 2-й пункт вашего списка :-)

    2) Для того чтобы функция сама определяла изменились ли входящие параметры, нужно задавать их как аргументы. Т.е.:
    Public Function mysumm(Arg1, Arg2)
          mysumm = Arg1 + Arg2
    End Function
    Если такое невозможно (а это в 99.9% случаев возможно), то есть вариант сделать формулу летучей, чтобы она пересчитывала при каждом событи вызывающем пересчет независимо от того, изменились ли входящие параметры или нет.

    Public Function mysumm(Arg1, Arg2)
         Application.Volatile 
         mysumm = Arg1 + Arg2
    End Function
    
     Но это крайне нежелательно особенно если, как вы говорите, расчет сложный.

    3) Пользовательские функции написанные в VBA опять-таки в 99.9% случаев в разы медленнее стандартных функций листа, т.ч., если скорость пересчета имеет значение, то пользовательские функции - это последний ресурс

    4) Если вы выложите полный код вашей функци, то, возможно, эту "сложную задачу" не так уж сложно решить стандартными функциями рабочего листа (во всяком случае так часто бывает)

    5) Вот тут еще немного основ создания UDF (пользовательских функций):
    http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
    Si la respuesta te es de utilidad por favor marca la pregunta como respondida.
    18 июля 2009 г. 12:24