Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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

Хорошо, нашел это сам. Вы можете использовать Ctrl + Alt + F9, чтобы выполнить это.

Ответ 4

Если вы включите ВСЕ ссылки на данные электронной таблицы в список параметров UDF, Excel пересчитает вашу функцию при каждом изменении ссылочных данных:

Public Function doubleMe(d As Variant)
    doubleMe = d * 2
End Function

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

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

Ответ 5

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

Application.Calculation = xlCalculationAutomatic    

Чтобы переключиться на ручной режим:

Application.Calculation = xlCalculationManual    

Ответ 6

Это обновляет расчет лучше, чем Range(A:B).Calculate:

Public Sub UpdateMyFunctions()
    Dim myRange As Range
    Dim rng As Range

    ' Assume the functions are in this range A1:B10.
    Set myRange = ActiveSheet.Range("A1:B10")

    For Each rng In myRange
        rng.Formula = rng.Formula
    Next
End Sub

Ответ 7

Используя Excel 2010, я столкнулся с теми же проблемами, что и Брайан. Когда я попробовал все предлагаемые здесь решения, улучшения не было, функция, определенная пользователем, не перерасчитывалась, несмотря на наличие Application.Volatile, использование комбинаций клавиш пересчета и т.д. Однако я понял, что мое определение функции виновато в том, что все ссылки на ячейки в он недостаточно квалифицирован для правильной работы, когда лист, содержащий эту функцию, не был активным листом, например, сменой ячеек (a, b) на Application.Caller.Worksheet.Cells(a, b) полностью устранена проблема! Я считаю, что это решение, потому что, когда лист, содержащий мою функцию, не является активными ячейками листа (a, b), интерпретируется как ссылающийся на любой лист, который был активен в то время.

Ответ 8

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

Ответ 9

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