VBA避免错误条件
示例
当发生运行时错误时,良好的代码应处理该错误。最佳的错误处理策略是编写代码以检查错误情况,并避免执行导致运行时错误的代码。
减少运行时错误的一个关键因素是编写可以做一件事的小程序。过程失败的原因越少,整个代码的调试就越容易。
避免运行时错误91-未设置对象或带块变量:
在分配对象引用之前使用对象时,将引发此错误。一个可能具有接收对象参数的过程:
Private Sub DoSomething(ByVal target As Worksheet) Debug.Printtarget.Name End Sub
如果target未分配引用,则上面的代码将引发错误,可以通过检查对象是否包含实际的对象引用来轻松避免该错误:
Private Sub DoSomething(ByVal target As Worksheet) If target Is Nothing Then Exit Sub Debug.Printtarget.Name End Sub
如果target未分配参考,则永远不会使用未分配的参考,并且不会发生错误。
当一个或多个参数无效时,这种提前退出过程的方式称为保护子句。
避免运行时错误9-下标超出范围:
在数组边界之外访问数组时,会引发此错误。
Private Sub DoSomething(ByVal index As Integer) Debug.PrintActiveWorkbook.Worksheets(index) End Sub
如果给出的索引大于中的工作表数量ActiveWorkbook,则上述代码将引发运行时错误。一个简单的保护子句可以避免这种情况:
Private Sub DoSomething(ByVal index As Integer) If index > ActiveWorkbook.Worksheets.Count Or index <= 0 Then Exit Sub Debug.PrintActiveWorkbook.Worksheets(index) End Sub
可以通过以下方法避免大多数运行时错误:在使用它们之前先仔细验证我们正在使用的值,并使用一条简单的If语句在另一个执行路径上进行分支-在不作任何假设并验证过程参数的警卫子句中,甚至在正文中较大的程序。