将Range.SpecialCells与错误处理程序一起使用是否是一种好习惯?

时间:2019-03-14 10:46:01

标签: excel vba

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

1 个答案:

答案 0 :(得分:4)

是的,使用错误处理程序是完全正常的(我更喜欢这种方式)。我要做的是,将其放入On Error Resume NextOn 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