将 div 0 错误更改为一个值(得到错误 13)vba excel

change div0 error into a value (getting error 13) vba excel

有些单元格有 div 0 错误,因为某些值尚未更新,所以这是我写的解决方法(尝试更改数组内的值):

For a = 0 To cap

    Hoja9.Cells(a + 4, 3).Value = Empty
    array_visco(a, 0) = Hoja1.Range("C" & a + 2)


   If Hoja1.Range("C" & a + 2) = CVErr(xlErrDiv0) Then array_visco(a, 0) = 0
' ^  ^  ^  ^  ^  ^ i get error 13 in this line  ^  ^  ^  ^  ^  ^  ^  ^  ^

    'menor quexxx
    Select Case Hoja9.Cells(2, 3)
    Case Is > 0
    If array_visco(a, 0) <= Hoja9.Cells(2, 3) Then Hoja9.Cells(a + 4, 3) = array_visco(a, 0)
    End Select
    'mayor quexxxx
    Select Case Hoja9.Cells(1, 3)
    Case Is > 0
    If array_visco(a, 0) >= Hoja9.Cells(1, 3) Then Hoja9.Cells(a + 4, 3) = array_visco(a, 0)
    End Select
    If Hoja9.Cells(a + 4, 3) = Empty Then Hoja9.Cells(a + 4, 3) = CVErr(xlErrNA)



    Next

问题是我收到错误 13,我不知道为什么


解决方案:

感谢吉普车

更改此行

If Hoja1.Range("C" & a + 2) = CVErr(xlErrDiv0) Then array_visco(a, 0) = 0

Select Case Hoja1.Range("C" & (a + 2)).Text
Case Is = "#¡DIV/0!"
array_visco(a, 0) = 0
End Select

您在单元格上收到的错误 不是 #DIV/0! 错误;不是一个#DIV/0!(或任何其他)错误。

这是检查任何工作表错误的一种方法,然后是仅检查 #DIV/0! 错误的两种方法。

If IsError(Selection) Then
    Debug.Print "iserror"
End If
If Selection.Text = "#DIV/0!" Then
    Debug.Print "text found error"
End If
If Selection = CVErr(xlErrDiv0) Then
    Debug.Print "xlErrDiv0"
End If

第三种方法可以在有错误时识别错误,但在没有错误时生成 Type mismatch。不能将常规文本、日期或数字值与错误进行比较,正如不能将错误分配给字符串或整数一样。

第二种简单比较 Range.Text property 的方法可能是定位 #DIV/0! 特定错误的最佳方法,第一种方法将捕获任何 #DIV/0!#VALUE!#N/A,等等错误。