Ошибка несоответствия типов в MS Excel VBA, когда массив имеет один элемент - PullRequest
0 голосов
/ 16 мая 2018

Прежде всего, прошу прощения за любую не технически правильную терминологию ...

Я написал макрос, который циклически просматривает отделы для выбранного магазина, создавая отдельный рабочий лист для каждого отдела, а затем публикуя его в формате PDF с каждым отделом на отдельной странице. В зависимости от выбранного хранилища число отделов может быть от 1, 11 или 12. Я использую именованный диапазон (rngDeptX) в книге Excel для хранения названий отделов, которые затем использую для заполнения массива в VBA. Процесс работает должным образом для экземпляров 11 или 12 отделов, но я получаю ошибку несоответствия типов для экземпляра 1 отдела.

Соответствующие строки кода должны быть ниже ...

Массив arrSheets используется позже в процессе и не вызвал никаких ошибок. Он заполняется теми же значениями, что и массив d, массив d - это механизм, используемый для циклического перебора имен отделов. Как указывалось ранее, процесс работает, как и ожидалось, если число отделов равно 11 или 12. Я перебираю код и выражение d = Range ("rngDeptX") возвращает правильный отдел, когда при наведении на него указателя появляется ошибка несоответствия типов. , Должен ли я сделать что-то другое, если для массива есть только один элемент? Я искал, но не нашел аналогичных вопросов. Спасибо за вашу помощь.

Dim arrSheets() As String, DptCnt As Long   'array of Department names, size of array
'determine required size of arrays, set size of arrays
DptCnt = WorksheetFunction.CountA(Range("rngDeptX"))
ReDim arrSheets(1 To DptCnt)

Dim d() As Variant
d = Range("rngDeptX")  <= this is where the error occurs

1 Ответ

0 голосов
/ 16 мая 2018

Принудительно использовать массив, если он только один, и ваш lbound / ubound должен работать в дальнейших операциях.

Dim d As Variant
d = Range("rngDeptX").value2
if not isarray(d) then d = array(d)
debug.print isarray(d)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...