Порядок пересчета в Excel - почему зависимая ячейка вычисляется раньше предыдущей?

У меня странная проблема с порядком вычислений в Excel - зависимая ячейка вычисляется перед предыдущей ячейкой с пустым значением параметра при установке грязного диапазона. Есть ли способ обнаружить эти «поддельные» звонки? Это критично для меня, так как я запускаю некоторую умную бизнес-логику в реальном приложении, и эти «фальшивые» вызовы нарушают всю логику.Кроме того, эти «фальшивые» вызовы, если они зарегистрированы в RTD, не привязывают его к теме должным образом и, следовательно, не уведомляют об отключении темы.

Последняя версия Excel 2010/32bit.

Чтобы проиллюстрировать проблему, я создал простую функцию:

Function Fnc(param2 As String) As String
    Fnc = Application.ThisCell.Address
    Debug.Print (Application.ThisCell.Address & " - " & param2)
End Function

И процедуру:

Sub SetDirty()
    Range("B1:C1").Dirty
End Sub

И простой лист:

$A$1 =fnc(A1) =fnc(B1)

в ячейки A1, B1, С1.

И результат очевиден:

$A$1 $B$1 $C$1

Если я пересчитаю ( CTRL+ Alt+ Shift+ F9) Как и ожидалось, я получаю:

$B$1 - $A$1

$C$1 - $B$1

Но самое интересное. Если я запускаю SetDirty:

$C$1 - <---- Откуда это?

$B$1 - $A$1

$C$1 - $B$1

Спасибо за любой вклад. Я бы предпочел решение, которое решает эту проблему, а не обходной путь, поскольку он уже является частью множества обходных путей.

5
задан Community 9 July 2018 в 18:41
поделиться