Ошибка вывода строки в ячейку

Ошибка вывода строки в ячейку

Я использую макрос vba для автоматизации части таблицы excel. Следующая строка продолжает выдавать мне ошибку времени выполнения 1004# ошибка приложения или объекта

Sheets("Material").Last.Offset(0, 1).Value = "=SUMIF(MainTable[0],AG12,MainTable[Cost])"

Используя часы, я знаю, что левая часть уравнения ссылается на нужную ячейку. Я предполагаю, что ошибка кроется в правой строке, которая записывается в ячейку - я думаю, возможно, с моими ссылками на таблицы? Остальные формулы как строки пишутся нормально и не содержат ссылок на таблицы.

решение1

Я предположил, что ошибка кроется в коде, потому что когда я получил ошибку выполнения, в указанной ячейке не было выходных данных. Проблема на самом деле возникает, если формула должна быть записана в ячейку, и она сгенерирует всплывающее окно с сообщением «Мы обнаружили проблему с этой формулой...». Не то же самое, что ошибки типа #NAME?, #VALUE!, #N/A. В моем случае мой код задал диапазон в таблице с именем MainTable, и один из заголовков столбцов был Effective Cost. Код задал формулу как строку, ссылающуюся на MainTable[Cost], которая должна была быть MainTable[Effective Cost].

VBA выдаст ошибку времени выполнения, подпрограмма остановится, а проблемная строка никогда не будет выведена в ячейку. Следующий код остановит подпрограмму. (дополнительные "(" дадут всплывающее окно с ошибкой формулы)

Range("A1").Value = "=Sum((B2:B4)"

Следующий код работает бесперебойно, хотя и выдает ошибку #NAME? в ячейке A1.

Range("A1").Value = "=Sum(PotatoSalad)"

Я также провел быстрый тест с массивом строк. Хранение формул в строках внутри массива, похоже, обходит проблему прерывания кода, поскольку формулы не будут вычисляться до обновления. Этот вопрос более подробно описывает, что происходит при использовании массива для выгрузки формул в ячейки - Короче говоря, использование вариантного массива заставит формулы вычисляться и останавливать подпрограмму.https://stackoverflow.com/questions/19238844/странное-поведение-при-назначении-массива-vba-формул-диапазона-Excel

Следующий код будет работать до тех пор, пока ячейка A1 не будет принудительно пересчитана.

Dim MyArray(0 to 0) as String MyArray(0) = "=Sum((B2:B4)" Range("A1").Value = MyArray()

Передача того же массива в качестве варианта приведет к ошибке выполнения.

Связанный контент