excelvba调试和错误处理 (excel vba自动化错误怎么解决)

处理excel表格经常会遇到各种公式使用造成的错误值。有些是使用不当造成的,有些是数据丢失造成的,原因很多。本文不研究错误产生的原因,研究一下怎么生成错误值,并检测琐是否有错误值。虽然不经常用公式,但是要检测和消除这些公式也是个麻烦事。

先上代码。

第1步:直接在sheet3中生成7种错误值:

Sub test()
myArray = Array(xlErrDiv0, xlErrNA, xlErrName, xlErrNull, _
 xlErrNum, xlErrRef, xlErrValue)
For i = 2 To 8
 Worksheets("Sheet3").Cells(i, 1).Value = CVErr(myArray(i - 1))
Next i
End Sub
'探索3000作品

得到下图:

excel如何判断vba是否存在问题,excelvba自动化错误怎么解决

图1

第2步:检测error值

 Private Sub Button13_Click(sender As Object, e As EventArgs) Handles Button13.Click
        Dim ws = (New excel).activesheet()
        Dim arr = ws.Getgrid("A2:A8")
        For i = 1 To UBound(arr, 1)
            ws.cells(i + 1, "B") = "'" + CStr(arr(i, 1))
        Next '探索3000原创代码
    End Sub

excel如何判断vba是否存在问题,excelvba自动化错误怎么解决

以上代码中可以在图1中把A列错误值显示出来。使用了CStr(arr(i, 1))字符形式。

结论:这七种错误值都是常数

常数值

#DIV/0!

-2146826281

#N/A

-2146826246

#NAME?

-2146826259

#NULL!

-2146826288

#NUM!

-2146826252

#REF!

-2146826265

#VALUE!

-2146826273

如何利用这些常数值来检测错误呢:

再来做个小函数:

Function check单元格error值(格 As Object)
        Dim dict As New Dictionary(Of Integer, String)
        dict.Add(-2146826281, "#DIV/0!")
        dict.Add(-2146826246, "#N/A")
        dict.Add(-2146826259, "#NAME?")
        dict.Add(-2146826288, "#NULL!")
        dict.Add(-2146826252, "#NUM!")
        dict.Add(-2146826265, "#REF!")
        dict.Add(-2146826273, "#VALUE!")
        Dim s As String
        If dict.ContainsKey(格.value) Then
            s = dict(格.value)
        Else
            s = ""
        End If
        Return s
    End Function '探索3000原创代码

excel如何判断vba是否存在问题,excelvba自动化错误怎么解决

以上代码很简单,就是把单元格对应的错误名(字符型)找出来,如果找不到,直接返回空字符串。

这个函数可以方便转化为vba功能,有vba基础的几乎可以直接用。

excel如何判断vba是否存在问题,excelvba自动化错误怎么解决

补充说明:

1,我不用vba来写,就是不想再写vba支持库了,写烦了。旧的也要换的。

2,改用vbnet写,代码看得更舒服,也能用上Visual Studio这个号称“宇宙第一IDE编辑器”的神器了。无论是类库的组织管理还是代码编辑都更直观,也方便理清思路。

3,以前老有网友在我贴文下说什么年代还用vba,现在用vbnet就几乎没有人说了。

4,有人说为什么不用C#,只因为我用vbnet来重写vba,这样老vba用户更有代入感,代码上更亲切。C#来做开发excel二开其实更麻烦。vbnet开发比vba,vb6更省代码,功能和速度更强。