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

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

8 ответов


вы должны использовать Application.Volatile ваши функции:

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

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


дополнительная информация о сочетаниях клавиш F9 для расчета в Excel

  • F9 пересчет всех листов во всех открытых книгах
  • Shift+ F9 пересчитывает активный рабочий лист
  • Ctrl+Alt+ F9 пересчет всех листов во всех открытых книгах (полный пересчет)
  • Shift + Ctrl+Alt+ F9 перестраивает дерево зависимостей и выполняет полный пересчет

хорошо, нашел этот сам. Вы можете использовать Ctrl+Alt+F9 для этого.


Если вы включите все ссылки на данные электронных таблиц в список параметров 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

переключиться на автоматический режим:

Application.Calculation = xlCalculationAutomatic    

переключиться на ручное управление:

Application.Calculation = xlCalculationManual    

это хорошо работает, чтобы обновить расчет лучше, чем диапазон(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

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

на Application.Volatile не работает для пересчета формулы с моей собственной функции внутри. Я использую следующую функцию: Application.CalculateFull