龙空技术网

Excel vba vbnet如何检测单元格错误值

探索3000 1338

前言:

现时同学们对“excelvba判断单元格为空”大体比较注重,看官们都需要了解一些“excelvba判断单元格为空”的相关文章。那么小编也在网上搜集了一些有关“excelvba判断单元格为空””的相关文章,希望姐妹们能喜欢,小伙伴们快快来了解一下吧!

处理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 iEnd 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更省代码,功能和速度更强。

标签: #excelvba判断单元格为空