Ошибка класса VBA FormulaArray, когда количество символов меньше 255 - PullRequest
1 голос
/ 29 апреля 2019

VBA .FormulaArray, похоже, имеет проблему с моим диапазоном. Я читал, что он не может обрабатывать более 255 символов, но у меня всего около 108, но я могу понять это неправильно.

Это дает

Ошибка 1004:
Невозможно установить свойство FormulaArray класса Range.

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

Также попытался оставить его как текст, а затем изменить столбец на «общий», но это не работает. И я знаю, что это создаст проблему, изменив ее таким образом на формулу массива.

Это код, который я использую:

With wsOutdated.ListObjects("Table_Outdated_Stock_Counts")
        .ListColumns("Ranging").DataBodyRange.NumberFormat = "General"
        .ListColumns("Ranging").DataBodyRange.FormulaArray = "=INDEX(Table_DispoData[[Class]],MATCH([@Article]&[@Site],Table_DispoData[Article]&Table_DispoData[Site],0),1)"
    End With

Мне нужно, чтобы столбец таблицы заполнялся автоматически формулой массива. Он работает для других столбцов (хотя они не являются формулами массива и должны соответствовать только одному значению).

1 Ответ

2 голосов
/ 29 апреля 2019

Возможно, вы могли бы попробовать:

.ListColumns("Ranging").DataBodyRange.Cells(1, 1).FormulaArray = "=INDEX(Table_DispoData[[Class]],MATCH([@Article]&[@Site],Table_DispoData[Article]&Table_DispoData[Site],0),1)"

Вместо:

.ListColumns("Ranging").DataBodyRange.FormulaArray = "=INDEX(Table_DispoData[[Class]],MATCH([@Article]&[@Site],Table_DispoData[Article]&Table_DispoData[Site],0),1)"

и посмотреть, работает ли он для вас!

Объяснение:

Ваш код пытается записать формулу Array одновременно в несколько ячеек, что недопустимо.Если вы попытаетесь сделать это в Excel, будет выдано сообщение об ошибке «В таблицах не разрешены формулы для нескольких ячеек».

...