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

excel vba excel-vba user-defined-functions

130192 просмотра

9 ответа

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

Автор: Brian Sullivan Источник Размещён: 23.07.2019 12:11

Ответы (9)


114 плюса

Решение

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

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

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

Автор: vzczc Размещён: 15.08.2008 06:18

36 плюса

Еще немного информации о сочетаниях клавиш F9 для расчета в Excel

  • F9 Пересчитывает все рабочие таблицы во всех открытых рабочих книгах.
  • Shift+ F9 Пересчитывает активный лист
  • Ctrl+ Alt+ F9 Пересчитывает все рабочие таблицы во всех открытых рабочих книгах (полный перерасчет)
  • Shift+ Ctrl+ Alt+ F9Перестраивает дерево зависимостей и делает полный пересчет
Автор: Robert Mearns Размещён: 07.09.2008 04:11

15 плюса

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

Автор: Brian Sullivan Размещён: 14.08.2008 01:59

11 плюса

Если вы включите ВСЕ ссылки на данные электронной таблицы в список параметров 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
Автор: Charles Williams Размещён: 23.09.2008 11:12

2 плюса

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

Application.Calculation = xlCalculationAutomatic    

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

Application.Calculation = xlCalculationManual    
Автор: ayman Размещён: 03.12.2014 07:22

1 плюс

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

Автор: alex303411 Размещён: 21.11.2017 08:20

1 плюс

Это обновляет расчет лучше, чем 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
Автор: MfJ Размещён: 10.06.2015 12:29

0 плюса

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
Автор: Prashanth Размещён: 22.10.2014 12:01

0 плюса

У меня похожая проблема. Я создал пользовательскую функцию. Допустим, у меня есть формула в ячейке C3, которая = C1 + C2. И в этих клетках есть ценности.

И я хотел бы показать в ячейке B3 формулу с фактическими значениями. Чем я наберу в ячейке формула B3 = psub (C3, {""}), и она покажет мне формулу с подставленными значениями в виде строки

Аргументы: psub («ячейка с формулой, которую нужно отобразить», «список функций, которые нужно пропустить»)

Рабочая формула

Что происходит через некоторое время или при печати нескольких листов с кодом vba, формулы как бы сбрасываются, и вместо любого значения ячейки отображаются только нули. Я пытался использовать Application.Volatile, который работает, пока я не распечатать через макрос VBA. Затем он сбрасывает формулы и показывает только нули.

Не работает формула

Автор: Vaclav Размещён: 23.07.2019 09:11
32x32