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