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

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

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

1 ответ1

0

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

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

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

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

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

Я также сделал быстрый тест с массивом строк. Хранение формул в строках в массиве, кажется, обходит проблему прерывания кода, поскольку формулы не будут оцениваться до обновления. Этот вопрос более детально описывает то, что происходит при использовании массива для выгрузки формул в ячейки. Короче говоря, использование варианта массива приведет к тому, что формулы вычислят и остановят подпрограмму. https://stackoverflow.com/questions/19238844/strange-behavior-when-assigning-a-vba-array-to-formulas-of-an-excel-range

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .