Обновить результаты функции Excel VBA

Знает ли кто-нибудь, как заставить определяемую пользователем функцию переоценивать себя (на основе измененных данных в электронной таблице)? Я пробовал F9и Shift+F9, но они не работают. Единственное, что, кажется, работает, это редактирование ячейки с вызовом функции, а затем нажмите Enter. Есть идеи? Я, кажется, помню, что был в состоянии сделать это…

8 ответов

  1. Вы должны использовать Application.Volatileв верхней части вашей функции:

    Function doubleMe(d)
        Application.Volatile
        doubleMe = d * 2
    End Function
    

    После этого она будет повторно оцениваться при каждом изменении книги (если для расчета задано значение автоматически).

  2. Дополнительные сведения о сочетаниях клавиш F9 для вычислений в Excel

    • F9 Пересчет всех листов во всех открытых книгах
    • Shift+ F9Пересчитывает активный лист
    • Ctrl+ Alt+ F9Пересчет всех листов во всех открытых книгах (полный пересчет)
    • Shift + Ctrl+ Alt+ F9Перестраивает дерево зависимостей и выполняет полный пересчет
  3. Если вы включаете все ссылки на данные электронной таблицы в список параметров UDF, Excel пересчитает вашу функцию при каждом изменении ссылочных данных:

    
        Public Function doubleMe(d as variant)
        doubleMe=d*2
        end Function
    

    Вы также можете использовать приложение.Летучий,
    но это имеет недостаток, заставляя ваш UDF всегда пересчитывать,
    даже когда это не нужно, потому что ссылочные данные не изменились.

    
        Public Function doubleMe()
        Application.Volatile
        doubleMe=Worksheets("Fred").Range("A1")*2
        end Function
    

  4. Public Sub UpdateMyFunctions()
        Dim myRange As Range
        Dim rng As Range
    
        'Considering The Functions are in Range A1:B10
        Set myRange = ActiveSheet.Range("A1:B10")
    
        For Each rng In myRange
            rng.Formula = rng.Formula
        Next
    End Sub
    
  5. Перейти на автоматический:

    Application.Calculation = xlCalculationAutomatic    
    

    Переход на ручное управление:

    Application.Calculation = xlCalculationManual    
    
  6. Это хорошо работает, чтобы обновить расчет лучше, чем диапазон(A:B).Вычислять

    Public Sub UpdateMyFunctions()
    Dim myRange As Range
    Dim rng As Range
    
    'Considering The Functions are in Range A1:B10
    Set myRange = ActiveSheet.Range("A1:B10")
    
    For Each rng In myRange
        rng.Formula = rng.Formula
    Next
    End Sub
    
  7. Application.VolatileНе работает для пересчета формулы с моей собственной функцией внутри. Я использую следующую функцию:
    Application.CalculateFull