![Ошибка вывода строки в ячейку](https://rvso.com/image/1415043/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%20%D0%B2%20%D1%8F%D1%87%D0%B5%D0%B9%D0%BA%D1%83.png)
Я использую макрос 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()
Передача того же массива в качестве варианта приведет к ошибке выполнения.