gpt4 book ai didi

vba - 如何获取数组值的错误号

转载 作者:行者123 更新时间:2023-12-03 08:26:10 24 4
gpt4 key购买 nike

为了简化起见,我简化了示例,并将以下值放在A1至A4范围内。
A1 = 0A2 = empty 'blank cellA3 = match(0;0;0) 'to produce #N/AA4 = 4,95
我想捕获A3中触发的错误号,该错误号已经存储在数组中,并且我只想打印正值。

  • test1 =>会产生运行时错误13,即使我已经检查了IsError
  • test2 =>跳过该错误,这非常棘手。
  • test3 =>我认为这是最好的解决方案,但我不知道如何获取错误号。
    Sub test1()
    Dim i As Long
    Dim arr() As Variant
    arr = ActiveSheet.Range("A1:A4").Value
    For i = 1 To 4
    If Not IsError(arr(i, 1)) And Not IsEmpty(arr(i, 1)) And arr(i, 1) <> "0" Then
    MsgBox arr(i, 1)
    End If
    Next i
    End Sub
    Sub test2()
    Dim i As Long
    Dim arr() As Variant
    arr = ActiveSheet.Range("A1:A4").Value
    On Error Resume Next
    For i = 1 To 4
    If Not IsEmpty(arr(i, 1)) And arr(i, 1) <> "0" Then
    MsgBox arr(i, 1)
    End If
    Next i
    End Sub
    Sub test3()
    Dim i As Long
    Dim arr() As Variant
    arr = ActiveSheet.Range("A1:A4").Value
    For i = 1 To 4
    If IsError(arr(i, 1)) = True Then
    MsgBox "error at position " & i
    ElseIf Not IsEmpty(arr(i, 1)) And arr(i, 1) <> "0" Then
    MsgBox arr(i, 1)
    End If
    Next i
    End Sub
  • 最佳答案

    sub test1的问题在于,即使一个条件已经是VBAAND也会尝试评估FALSE中的所有条件。因此,从...arr(i, 1) <> "0"...抛出错误,尝试将ErrorString进行比较。

    Sub test1()
    Dim i As Long
    Dim arr() As Variant
    arr = ActiveSheet.Range("A1:A4").Value
    For i = 1 To 4
    If Not IsError(arr(i, 1)) Then
    If Not IsEmpty(arr(i, 1)) Then
    If arr(i, 1) <> "0" Then
    MsgBox arr(i, 1)
    End If
    End If
    End If
    Next i
    End Sub

    应该运行没有运行时错误。

    知道这一点,您可以执行以下操作:
    Sub test1()
    Dim i As Long
    Dim arr() As Variant
    arr = ActiveSheet.Range("A1:A4").Value
    For i = 1 To 4
    If Not IsEmpty(arr(i, 1)) Then
    If IsError(arr(i, 1)) Then
    MsgBox CStr(arr(i, 1))
    ElseIf arr(i, 1) <> "0" Then
    MsgBox arr(i, 1)
    End If
    End If
    Next i
    End Sub

    使用 CStr进行显式转换是必要的,因为 VBA不会像将 Error-> StringDouble-> String一样隐式将 0转换为 "0",而不会将隐含地将 4.95转换为 "4.95"

    如果仅需要错误号,则也可以使用 CLng进行显式转换。
    If IsError(arr(i, 1)) Then 
    ...
    ...CLng(arr(i, 1))
    ...
    End If

    关于vba - 如何获取数组值的错误号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40957341/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com