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

VBA如何检查单元格值是否有效和存在?,vba,excel,Vba,Excel,我有一个单元格。偏移量(0,-2)单元格,我需要检查它是否存在于我的VBA循环中 我的想法是,如果单元格有一个不存在的.Offset(0,-2)(例如说单元格=列B和单元格。Offset(0,-2)=列A-1,单元格。Offset(0,-2)应该是无效的),我希望能够检查它在if-else语句中是否不存在 现在,当它不存在时,我得到一个“运行时错误1004:应用程序定义或对象定义错误” 我试过ISER(cell.Offset(0,-2)),cell.Offset(0,-2).Value,如果ce

我有一个
单元格。偏移量(0,-2)
单元格,我需要检查它是否存在于我的VBA循环中

我的想法是,如果
单元格
有一个不存在的
.Offset(0,-2)
(例如说
单元格
=列B和
单元格。Offset(0,-2)
=列A-1,
单元格。Offset(0,-2)
应该是无效的),我希望能够检查它在if-else语句中是否不存在

现在,当它不存在时,我得到一个
“运行时错误1004:应用程序定义或对象定义错误”


我试过
ISER(cell.Offset(0,-2))
cell.Offset(0,-2).Value
如果cell.Offset(0,-2)什么都不是,那么
cell.Offset(0,-2)=''
,但它们似乎都不起作用。。。谁能给我指出正确的方向吗?我对VBA非常陌生,似乎不同的变量类型有不同的方法来检查值是否存在。

解决方法是使用不断误用的“错误恢复下一步”
,再加上一个
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应用程序
错误,并且您可以实际识别并使用真正返回的错误,而不仅仅是强制结束宏/脚本


为了避免使用错误检查,您可以始终检查当前列索引(B为2),并确保在减去索引后,偏移量大于0。例如,B列是2。你的偏移量是2
2-2=0
,因此不应尝试此操作。列C是3,
3-2=1
,它大于0,因此它是有效的。这两种方法都是可探索的。

如果可以使用偏移量作为变量,或者使用某种方法对单元格的列进行求值,则无需对错误进行防御。考虑下面……/P>
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
Sub-IsvalidARea()
Dim OffsetAmount为整数:OffsetAmount=-2
暗淡单元格作为范围
如果单元格列+偏移量<1,则
MsgBox“哦,错了!”
其他的
“一切都好!
如果结束
端接头

您可以检查if中的列是否大于2statement@DarrellH你是说检查列值?是的<代码>如果cell.column>2,则…只需确保.column大于偏移量即可。或者,.Column和偏移量之和>0,但也需要小于Columns.count或者直接检查Column来使用@DarrellH的解决方案,或者(如果你想在设定的范围内)使用类似
的东西,如果不相交(单元格,[range it is ok]),则什么都不是,然后
…是的,我正在读关于这个。。。不确定这是不是最好的方式。