Range.ArrayFormula, вызывающий ошибку в конкретных случаях

У меня есть фрагмент кода, который помещает формулу массива в диапазон. Он бросает

Ошибка выполнения: 438 «Объект не поддерживает это свойство или метод»

Но когда я вставляю ту же формулу в ячейку и нажимаю Ctrl+Shift+Enter

все работает нормально.

 strFormula = "=IF(SUM(--(A2=Data!$A$2:$A$1423)*--(B2=YEAR(Data!$B$2:$B$1423))* --(C2=MONTH(Data!$B$2:$B$1423)) * (Data!$E$2:$E$1423))=0,TEXT(,),SUM(--(A2=Data!$A$2:$A$1423)*--(B2=YEAR(Data!$B$2:$B$1423))* --(C2=MONTH(Data!$B$2:$B$1423)) * (Data!$E$2:$E$1423)))" shtAbsoluteData.Range("D2").ArrayFormula = strFormula 

Проблема возникает, когда условие IF было вставлено. Таким образом, без IF следующий код работает нормально:

 strFormula = "=SUM(--(A2=Data!$A$2:$A$1423)*--(B2=YEAR(Data!$B$2:$B$1423))* --(C2=MONTH(Data!$B$2:$B$1423)) * (Data!$E$2:$E$1423))" shtAbsoluteData.Range("D2").ArrayFormula = strFormula 

ПРИМЕЧАНИЕ. Если я использую shtAbsoluteData.Range("D2").Formula тогда нет ошибки, но результат неверен

Вы не можете вводить строки длиной более 255 символов непосредственно через vba, как в вашем случае. Для таких случаев используйте Replace -trick.

Код, вероятно, будет читать:

 strFormula = "=IF(SUM(--(A2=Data!$A$2:$A$1423)*--(B2=YEAR(Data!$B$2:$B$1423))* --(C2=MONTH(Data!$B$2:$B$1423)) * (Data!$E$2:$E$1423))=0, """" ,SUM(--(A2=Data!$A$2:$A$1423)*--(B2=YEAR(Data!$B$2:$B$1423))* --(C2=MONTH(Data!$B$2:$B$1423)) * (Data!$E$2:$E$1423)))" 

он должен помочь, если это текст с пустыми аргументами, что создает проблему.

PS. Обратите внимание на двойные кавычки

  • Смещение и вырезание значений одного столбца в другой столбец
  • Ссылаясь на один столбец в диапазоне, определяемом таблицей
  • Именованные диапазоны в Excel OpenXML
  • Значение доступа ячейки в диапазоне, которое делает утверждение if истинным в excel
  • Как вернуть диапазон ячеек в VBA без использования цикла?
  • Свойство Cells - Ошибка времени выполнения 91
  • Excel c # конвертировать ячейку в процентах
  • Для цикла с переменной переменной
  • Использование элемента управления «RefEdit» для проверки определенного диапазона
  • Передача диапазона в пользовательскую функцию из ячейки
  • Отправка динамического диапазона функции
  • Давайте будем гением компьютера.