Если ваш макрос выдаёт ошибку при использовании метода SpecialCells - возможно, причина в установленной защите листа Excel.
Почему разработчики Microsoft отключили работу этой функции на защищённых листах - не совсем понятно, но мы попробуем обойти это ограничение.
Итак, нам надо получить все заполненные ячейки из некого диапазона листа Excel.
Обычно для этого используется вызов метода SpecialCells - например,
msgbox Range("a2:d8").SpecialCells(xlCellTypeConstants).Address
Но на защищенном листе такой код выдаст ошибку 1004.
Чтобы избавиться от ошибки, мы используем функцию SpecialCells_TypeConstants - замену встроенному методу SpecialCells(xlCellTypeConstants)