Я полагаю, что причина кроется в том, что вы уже столкнулись с ошибкой. Однако вы никогда не очищали свою ошибку от обработчика. Вторая ошибка не будет пропустить эту строку снова.
Поэтому, чтобы повторить это, у меня было три листа, пустой ряд во втором и третьем. Ваш On Error Goto
прошел второй лист, но вернул бы Error 1004
на третьем.
Возможно, вы захотите включить Err.Clear
On Error Resume Next
ar = sh.Range("1:1").SpecialCells(xlCellTypeConstants) 'error 1004 on certain sheets
skip:
Err.Clear
Next sh
РЕДАКТИРОВАТЬ: Только что нашли альтернативное решение здесь
И даже тогда, возможно, даже полностью отказаться от обработки ошибок и использовать что-то вроде:
If WorksheetFunction.CountA(sh.Rows(1)) > 0 Then
ar = sh.Range("1:1").SpecialCells(xlCellTypeConstants)
End If