Сведения о вопросе

Martincow

04:32, 22nd August, 2020

Теги

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

Просмотров: 481   Ответов: 8

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



  Сведения об ответе

pumpa

13:34, 21st August, 2020

Вы должны использовать Application.Volatile в верхней части вашей функции:

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

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


  Сведения об ответе

PIRLO

09:53, 28th August, 2020

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

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


  Сведения об ответе

dump

16:20, 1st August, 2020

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


  Сведения об ответе

qwerty101

07:17, 13th August, 2020

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


  Сведения об ответе

nYU

05:59, 19th August, 2020

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

Application.Calculation = xlCalculationAutomatic    

Чтобы перейти на ручное управление:

Application.Calculation = xlCalculationManual    


  Сведения об ответе

PAGE

22:35, 21st August, 2020

Это обновляет расчет лучше, чем 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


  Сведения об ответе

SSESION

07:43, 5th August, 2020

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


  Сведения об ответе

repe

21:41, 28th August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться