在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
答案 0 :(得分:4)
是的,使用错误处理程序是完全正常的(我更喜欢这种方式)。我要做的是,将其放入On Error Resume Next
和On Error GoTo 0
之间,然后检查If NewRange is Nothing
查看此示例
On Error Resume Next
Set NewRange = OriginalRange.SpecialCells(Type:=Excel.XlCellType.xlCellTypeConstants, _
Value:=Excel.XlSpecialCellsValue.xlNumbers)
On Error GoTo 0
If NewRange Is Nothing Then
MsgBox "Your message here informing the USER that desired cells were not found"
Else
'
'~~> Do whatever you want with the range
'
End If