VBA如何检查单元格值是否有效且存在?

时间:2017-07-14 01:13:01

标签: excel vba excel-vba

我有这个cell.Offset(0, -2)单元格,我需要检查它是否存在于我的VBA循环中。

我的想法是,如果cell的{​​{1}}不存在(例如说.Offset(0, -2) = B列而cell = A-1列,{{ 1}}应该是无效的),我希望能够检查if else语句中是否存在它。

现在当它不存在时,我得到一个cell.Offset(0, -2)

我已经尝试过cell.Offset(0, -2)“Runtime Error 1004: Application defined or object defined error”IsErr(cell.Offset(0, -2))cell.Offset(0, -2).Value,但它们似乎都没有用......有人能指出我正确的方向吗?我对VBA很新,看起来不同的变量类型有不同的方法来检查值是否存在。

2 个答案:

答案 0 :(得分:0)

解决此问题的方法是使用不断误用的On Error Resume Next,并加上If IsError。这是一个例子:

On Error Resume Next
If IsError(ActiveCell.Offset(, -2).Select) = True Then
    'This is indicative of an error. Meaning you are on Column B, and you ran out of space.
Else
    'This means an error did not occur. Meaning you were at least on Column C or above.
End If

可能有更好的解决方案,事实上我确信有。但是这样做可以让你超越实际的1004 Application错误,并且你可以实际识别并使用真正返回的错误,而不是仅仅强制你的宏/脚本结束。

为了避免使用错误检查,您始终可以检查当前列索引(B是2)并确保您正在抵消的任何内容,一旦您的索引减去大于0.例如,列B为2。您的偏移量为2. 2 - 2 = 0,因此不应尝试。 C列为3,3 - 2 = 1,大于0,因此它是有效的。两者都是可探索的方法。

答案 1 :(得分:0)

如果您可以将偏移量用作变量,或者使用某种方法来评估单元格的列,则无需防范错误。请考虑以下......

Sub IsvalidARea()
    Dim OffsetAmount As Integer: OffsetAmount = -2
    Dim Cell As Range

If Cell.Column + OffsetAmount < 1 Then
MsgBox "Oh FALSE!"
Else
'EVERYTHING IS OKAY!

End If
End Sub
相关问题