1EXCEL的各种报错
- #N/A NA=Not Available,找不到(无法得到想要得结果)
- 这个错误通常表示找不到要求查找的内容
- 一般是查找函数查不到结果就报这个,函数没法返回可用数值
- 比如用 vlookup() match()等查找得函数容易报这样得错
- #DIV/0! 除以0报错,或者除数引用的是空白内容/空白单元格
- #NAME? 输入得函数名不认识,或者基本语法错误?
- 函数名写错, sum(1+2) 写成 sam(1+2)
- 不认识,不存在得函数名,自定义函数名,名称等等
- 版本导致得函数识别出错?
- 不合理的数据类型混用报错,比如数值和字符串计算等等,比如 =1+a=#NAME?
- #NUM! 数值计算结果错误!数字,数学上的一些问题
- 不是整数 / 数值溢出,比如=10^2000=#NUM!
- 负数不能开方,SQRT(-10)
- #REF! 引用无效,公式失效!
- 例如引用的地方被删除
- #VALUE! 计算过程错误导致,无法返回正常结果!
- 比如 1+a=#VALUE!
- 比如 1+!!!333=#VALUE!
- #NULL! 为空
- 空格,可以是 EXCEL交集运算符
- =G16:G18 G18:G20=G18得内容
- 如果两者没有交集会返回空!
- SUM(G10:G12 I10:I12) = #NULL! 或 G10:G12 I10:I12 = #NULL!
- ###### 显示不全,一般拉宽可解决
2 EXCEL的各种错误处理函数
- isna() 判断是否 "找不到/查不到 结果"
- isblank() 判断单元格是否为空
- iserror() 判断是否报错,包含 NA
- iserr() 判断是否报错,但不包含 NA
- iferror()
可将单元格错误值插入单元格,或者用 CVErr 函数测试单元格的值是否为某个错误值。单元格错误值可为以下 XlCVError 常量之一。
常量 | 错误号 | 单元格错误值 |
---|---|---|
xlErrDiv0 | 2007 | #DIV/0! |
xlErrNA | 2042 | #N/A |
xlErrName | 2029 | #NAME? |
xlErrNull | 2000 | #NULL! |
xlErrNum | 2036 | #NUM! |
xlErrRef | 2023 | #REF! |
xlErrValue | 2015 | #VALUE! |
这段是网上找的例子,不是我写的
[求助]如何附值错误和判断错误?-Excel VBA程序开发-ExcelHome技术论坛 -
Worksheets("Sheet1").Activate If IsError(ActiveCell.Value) Then errval = ActiveCell.Value Select Case errval Case CVErr(xlErrDiv0) MsgBox "#DIV/0! error" Case CVErr(xlErrNA) MsgBox "#N/A error" Case CVErr(xlErrName) MsgBox "#NAME? error" Case CVErr(xlErrNull) MsgBox "#NULL! error" Case CVErr(xlErrNum) MsgBox "#NUM! error" Case CVErr(xlErrRef) MsgBox "#REF! error" Case CVErr(xlErrValue) MsgBox "#VALUE! error" Case Else MsgBox "This should never happen!!" End Select End If
3VBA的各种报错
- 语法错误
- 编译错误
- 运行错误
- 逻辑错误 代码语法没错,但是运行逻辑有错,解决不了问题/返回了错误结果
4 VBA的各种错误处理函数
第1类
- worksheetfunction.iserror()
- worksheetfunction.isblank()
- 等等工作表函数
第2类
- application.iserror()
- 等等应用内置函数
第3类 VBA该函数
- iserror() '判断是否为 错误值
- isempty() '判断是否为空,但是注意 ""不是空!是空白字符串!
- len()=0 '判断是否为 空/错误 等,反正len() 都=0
- 用 on error goto 错误处理语句处理
- on error goto line1:
- line1: "这个是XX错误"
- on error resume next
- 变量 typename()
- if Cells(i, "A").Text = "#N/A" ’居然这样也行的!!
Sub t1()
On Error Resume Next
a2 = 1 / 0 '本身会报错,有前面语句加持,相当于a2未被赋值
a3 = ""
Debug.Print IsError(a1)
Debug.Print IsError(a2)
Debug.Print IsError(a3)
Debug.Print
Debug.Print IsEmpty(a1)
Debug.Print IsEmpty(a2)
Debug.Print IsEmpty(a3)
Debug.Print
Debug.Print Len(a1)
Debug.Print Len(a2)
Debug.Print Len(a3)
Debug.Print
End Sub