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



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

699   8  

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

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

Comments

    Ничего не найдено.