如何检查单元在VBA中是否有效?

如果

  • r = 1 ,和
  • c = 1

下面的代码是无效的(它试图返回列A左边的两列)

 Cells(r, c).Offset(0, -2) 

如何检查目标单元格是否有效或不在vba中 ?

  1. 使用一个Range对象来testing它是否有效(首选的多function性)
  2. testing列是否有效(假设你的OFFSET硬编码为(0,2)

(1)代码

 Sub Test1() Dim r As Long Dim c As Long r = 1 c = 1 Dim rng1 As Range On Error Resume Next Set rng1 = Cells(r, c).Offset(0, -2) On Error GoTo 0 If Not rng1 Is Nothing Then 'proceed with your code - range exists Else MsgBox "Range Error", vbCritical End If End Sub 

(2)代码

 Sub Test2() Dim rng1 As Range Dim r As Long Dim c As Long c = 3 r = 1 If c - 2 <= 0 Then MsgBox "Error", vbCritical Else Set rng1 = Cells(r, c).Offset(0, -2) End If End Sub 

这里是你的例子。

 Sub sample() Dim r As Integer Dim c As Integer r = 1 c = 1 Dim validRng As Boolean validRng = isValidRng(r, c, 0, -2) Debug.Print validRng validRng = isValidRng(r, c + 5, 0, 2) Debug.Print validRng validRng = isValidRng(r, c, -1, 0) Debug.Print validRng validRng = isValidRng(r, c + 2, 0, -1) Debug.Print validRng End Sub Function isValidRng(row As Integer, col As Integer, offsetrow As Integer, offsetcol As Integer) As Boolean 'Returns if its valid range If ((row + offsetrow) > 0) And ((col + offsetcol) > 0) Then isValidRng = True Else isValidRng = False End If End Function