Обновить результаты функции 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
The
Application.Volatileне работает для пересчета формулы с моей собственной функции внутри. Я использую следующую функцию:Application.CalculateFull
Comments