【问题标题】:VBA How to Check if Cell Value is valid and exists?VBA如何检查单元格值是否有效且存在?
【发布时间】:2017-12-18 23:20:23
【问题描述】:

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

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

现在,当它不存在时,我会收到 “Runtime Error 1004: Application defined or object defined error”

我尝试过IsErr(cell.Offset(0, -2))cell.Offset(0, -2).ValueIf cell.Offset(0, -2) Is Nothing Thencell.Offset(0, -2) = "",但它们似乎都不起作用……谁能指出我正确的方向?我对 VBA 很陌生,似乎不同的变量类型有不同的方法来检查值是否存在。

【问题讨论】:

  • 你可以在你的if语句中检查列是否大于2
  • @DarrellH 你的意思是检查列值?
  • 是的。 If cell.column > 2 then...
  • 只要确保 .Column 大于偏移量即可。或者,.Column 和偏移量的总和 > 0,但也需要小于 Columns.Count
  • 要么通过直接检查列来使用@DarrellH 的解决方案,要么(如果你想在一个设定的范围内)使用类似If Not Intersect(cell, [range which is ok]) Is Nothing Then...

标签: vba excel


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    解决这个问题的方法是使用经常被误用的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,因此它是有效的。两者都是可探索的方法。

    【讨论】:

    • 是的,我正在读到那个……但不确定这是否是最好的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2010-12-19
    相关资源
    最近更新 更多