Я предположил, что ошибка лежит в коде, потому что, когда я получил ошибку времени выполнения, в данную ячейку не было никакого вывода. Проблема на самом деле возникает, если формулы записываются в ячейку, и при этом появляется всплывающее окно с сообщением «Мы обнаружили проблему с этой формулой ....» Не то же самое, что #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()
Передача того же массива, что и в варианте, приведет к ошибке во время выполнения.