При использовании Range.SpecialCells с диапазоном, который не содержит ячейки, которые соответствуют критериям, выдается ошибка, сообщающая, что ячейки не найдены.
Наиболее распространенное решение этой проблемы - позволить этому случиться и использовать обработчик ошибок для его решения.
Это самый известный способ ее решения или есть другие решения, которые могут быть столь же хорошими или лучше, которые избегают использования обработчика ошибок?
Единственное, о чем я могу подумать, это сохранить значение первой ячейки, затем изменить его значение на значение, соответствующее критериям, чтобы избежать ошибки, сделав его всегда совпадающим хотя бы с одной ячейкой, а затем изменить значение обратно на его Исходное значение и проверьте адрес соответствующего диапазона, чтобы увидеть, соответствует ли он только одной ячейке или более.
Плохим / медленным решением было бы вообще не использовать его, а просто использовать циклы с проверками.
Вот простой пример кода, демонстрирующий, как он работает с обработчиком ошибок:
Private Sub Procedure()
Dim OriginalRange As Excel.Range
Dim NewRange As Excel.Range
Set OriginalRange = ThisWorkbook.Worksheets(1).Range("A1:C4")
On Error GoTo ErrorHandler
Set NewRange = OriginalRange.SpecialCells(Type:=Excel.XlCellType.xlCellTypeConstants, Value:=Excel.XlSpecialCellsValue.xlNumbers)
Exit Sub
ErrorHandler:
If (VBA.Err.Number <> 1004) Then VBA.Err.Raise VBA.Err.Number
End Sub