У меня есть ряд формул массива в Excel, которые отличаются друг от друга.Они автоматически изменяются в соответствии с диапазоном данных, которые создаются с помощью собственной надстройки Excel.
Однако всякий раз, когда мой код переписывает некоторые формулы массива с правильным новым размером, все ячейки отображаются как # N / A до тех пор, пока вы не отредактируете другую несвязанную ячейку на листе, сохраните лист или нажмете F9,
Использование кода, такого как Application.Calculate, ActiveSheet.Calculate и т. Д., Не оказывает никакого влияния.
Однако использование SendKeys "{F9}" не дает.
Например, на листе приведены две формулы:
={IF(LEN(INDEX(A:A, ROW()))>0,ROW(A:A)+2)}
и
={LARGE(OFFSET($J$1,0,0,ROW()),1)}
Первая формула работает нормально после ее программной записи в диапазонеклетки.Это просто говорит мне номер строки ячейки, в которой есть текст.
Вторая формула не работает после ее программной записи в диапазон ячеек.Это дает мне наибольший номер строки, который был ранее замечен в списке чисел (который является выходом первой формулы).Если я нажму F9, вторая формула обновится правильно.Если я делаю Application.Calculate в VBA, ничего не происходит.Я также пробовал различные другие методы пересчета, доступные на уровне рабочего листа, но не повезло.
Кто-нибудь сталкивался с чем-то подобным раньше?
edit: Код изменения размера, по сути, сводится к чему-то следующему (удаление всего кода поддержки, который позволяет мне делать более обобщенные вызовы):
Сначала я делаю:
formula = dataSheet.Cells(startRow, startColumn).formula
Затем позже:
Set DeleteRange = dataSheet.Range(dataSheet.Cells(startRow, startColumn), dataSheet.Cells(bottomBound, rightBound))
DeleteRange.ClearContents
Set DeleteRange = Nothing
Затем позже:
Set resultRange = dataSheet.Range(dataSheet.Cells(startRow, startColumn), dataSheet.Cells(startRow + Height - 1, startColumn + Width - 1))
resultRange.FormulaArray = formula
Set resultRange = Nothing
В скорлупе ореха я делаю копиюформула, очистить диапазон, а затем переписать его.