处理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作品
得到下图:

图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

以上代码中可以在图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原创代码

以上代码很简单,就是把单元格对应的错误名(字符型)找出来,如果找不到,直接返回空字符串。
这个函数可以方便转化为vba功能,有vba基础的几乎可以直接用。

补充说明:
1,我不用vba来写,就是不想再写vba支持库了,写烦了。旧的也要换的。
2,改用vbnet写,代码看得更舒服,也能用上Visual Studio这个号称“宇宙第一IDE编辑器”的神器了。无论是类库的组织管理还是代码编辑都更直观,也方便理清思路。
3,以前老有网友在我贴文下说什么年代还用vba,现在用vbnet就几乎没有人说了。
4,有人说为什么不用C#,只因为我用vbnet来重写vba,这样老vba用户更有代入感,代码上更亲切。C#来做开发excel二开其实更麻烦。vbnet开发比vba,vb6更省代码,功能和速度更强。