ET疑难千寻千解丛书之EXCEL2010编程与实践 罗刚君 章兰新 黄朝阳 编著
疑难5
如何获取VBA所有运行时错误的详细说明 将VBA中的运行时错误罗列到工作表中,方便学习,而且可以查看详细说明。 è解决方案 要获取所有错误的编号及信息,可以利用Err对象的Raise方法人为制造错误,然后利用Err.Number取出错误编号,而用Err.Description属性返回错误信息。如果需要返回更详细的信息,则借用Err.HelpFile得到错误对应的帮助文件,以及 Err.HelpContext得到错误主题的ID号,最后用Application.Help方法可以根据错误ID号打开对应的帮助文件。 í操作方法 步骤1
按【Alt+F11】组合键打开VBE窗口。选择菜单“插入”→“模块”,并输入以下代码:
- Sub 获取所有错误类型编码及含义() '人工造成错误并获取错误信息
- On Error Resume Next '错误时继续执行
- Dim arr(), i As Integer
- ReDim arr(1 To 1000, 1 To 2) '声明一个二维数组,1000行2列
- Range("A1:B1") = Array("错误ID", "错误描述(单击查看详细描述)") '标题赋值
- Range("A1:B1").Interior.ColorIndex = 3 '添加背景色
- VBA.Err.Raise 1 ' 故意产生运行时错误,方便后面的操作
- Cells(2, 1) = 1 '错误编号
- Cells(2, 2) = Err.Description '错误类型
- For i = 2 To 1000 '提取2到1000之间的错误类型
- VBA.Err.Raise i '产生一个编号为i的错误(其中有重复)
- '如果其错误类型不和编号1相同则取其编号与错误描述
- If Error(i) <> "应用程序定义或对象定义错误" Then
- arr(i + 1, 1) = Err.Number '将错误编号存入数组
- arr(i + 1, 2) = Err.Description '将错误描述存入数组
- End If
- Err.Clear '清除错误,方便取下一个错误的相关信息
- Next i
- Range("A3:B1001") = arr '将数组写入单元格
- Columns("A:B").AutoFit '自动调整列宽
- '将A1:A1001中空单元格整行删除
- Range("A1:A1001").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
- End Sub
复制代码步骤2
如果没有显示工程资源管理器则按【Ctrl+R】组合键打开工程资源管理器,双击当前工程中的“ThisWorkbook”,并在右边的代码窗口中输入以下代码:
- Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
- If Target.Column = 2 Then '仅在选择第二列时执行
- On Error Resume Next '防错
- Err.Raise Target(1).Offset(0, -1) '产生一个错误,错误号为A列的值
- Application.Help Err.HelpFile, Err.HelpContext '打开对应的帮助文件
- End If
- End Sub
复制代码
步骤3
双击工程资源管理器中的“模块1”,光标定位于过程“获取所有错误类型编码及含义”中任意位置,按【F5】键执行程序。 步骤4
关闭VBE窗口返回工作表界面,在A:B区域中已罗列出1到1000之间的运行时错误编号及错误描述,如图。 单击B4单元格,可以打开编号为A4单元格的错误信息的详细描述,如图。
============================= 以上摘自《EXCEL2010编程与实践》 |