On Error语句

1.含义(MSDN)

On Error GoTo 0 表示禁止当前过程中任何已启动的错误处理程序。

 On Error Resume Next 说明当一个运行时错误发生时,控件转到紧接着发生错误的语句之后的语句,并在此继续运行。访问对象时要使用这种形式而不使用 On Error GoTo。

On Error GoTo line 启动错误处理程序,且该例程从必要的 line 参数中指定的 line 开始。line 参数可以是任何行标签或行号。如果发生一个运行时错误,则控件会跳到 line,激活错误处理程序。指定的 line 必须在一个过程中,这个过程与 On Error 语句相同; 否则会发生编译时间错误。

以上MSDN上的解释 一般情况下,如果在对我们创建的对象或控件进行错误捕捉,需要使用On Error Resume Next ,然后在判断它的Err.Number,根据错误类型来做相应的处理。

2.例子

一个错误处理函数,当系统发生错误用来处理相应的错误。

Public Sub Hbora_err_handler(prmstrProgName As String)        

      Dim lngErrCD        As Long     ' 错误Code

      Dim strErrDes       As String   '  错误内容

      ' Oracle连接错误   

     If Err.Number = 440 Then             

           ' セッション系を先に参照するように変更        

             If PBora_session.LastServerErr <> 0 Then            

                              lngErrCD = PBora_session.LastServerErr            

                              If prmstrProgName <> "" Then                

                                                      strErrDes = "「" & prmstrProgName & "」 " & _            

                                                        PBora_session.LastServerErrText           

                              Else                

                                                         strErrDes = PBora_session.LastServerErrText            

                             End If                

               ElseIf PBora_database.LastServerErr <> 0 Then           

                            lngErrCD = PBora_database.LastServerErr            

                             If prmstrProgName <> "" Then                

                                                        strErrDes = "「" & prmstrProgName & "」 " & _         

                                                        PBora_database.LastServerErrText            

                             Else                

                                                          strErrDes = PBora_database.LastServerErrText           

                             End If                

                 Else            

                            lngErrCD = Err.Number            

                             If prmstrProgName <> "" Then                

                                                         strErrDes = "「" & prmstrProgName & "」 " & Err.Description       

                             Else                

                                                         strErrDes = Err.Description           

                              End If      

                    End If        

    ' Oracle连接外的错误    

      Else        

                  lngErrCD = Err.Number        

                  If prmstrProgName <> "" Then            

                                    strErrDes = Chr(10) & "「" & prmstrProgName & "」 " & Chr(10) & Chr(10) & Err.Description

                  Else            

                                       strErrDes = Err.Description       

                  End If    

       End If    

 On Error Resume Next        

                  ' 打印log

                  Call Hbpub_put_log(HM_LOG_ERROR, lngErrCD, strErrDes)      

                 ' 显示信息

                  Call Hbora_msg_stop("WCM001", lngErrCD, strErrDes)        

                  ' 回滚 

                  PBora_session.Rollback       

                  ' 断开连接

                 Call Hbora_close_connection    

On Error GoTo 0       

                 ' 程序终了

                  End    

 End Sub

<think>好的,我现在需要帮助用户解决关于Excel VBA中On Error Goto语句的用法及常见示例的问题。首先,我需要回顾自己对于VBA错误处理的知识,特别是On Error语句的不同用法。根据用户提供的引用内容,特别是引用[1]中提到的On Error Goto ErrorHandler是常见的错误处理机制,我需要详细解释这个结构的作用和用法。 首先,我应该从基础开始,解释On Error语句在VBA中的作用。VBA中的错误处理机制允许程序在遇到运行时错误时不会立即崩溃,而是转向指定的错误处理代码。On Error Goto标签就是其中一种方式,当错误发生时,程序会跳转到标签所在的位置执行错误处理程序。 接下来,我需要分点说明On Error Goto的用法,可能包括基本语法、错误处理块的组成、恢复执行的方式等。例如,基本结构可能包括On Error Goto ErrorHandler,然后定义ErrorHandler标签后的代码,处理错误后使用Resume语句返回原代码。 然后,我需要考虑用户可能需要常见示例,比如处理文件打开错误、除零错误、类型不匹配等。这些示例需要具体且实用,用户可以直接参考并应用到自己的代码中。例如,当尝试打开一个不存在的文件时,使用On Error Goto来捕获错误并提示用户。 此外,还需要注意不同On Error语句的区别,比如On Error Resume NextOn Error Goto 0的使用场景。用户可能会混淆这些,所以需要明确说明它们的差异,例如,On Error Resume Next会忽略错误继续执行下一行,而On Error Goto 0会关闭错误处理。 同时,我需要提醒用户在使用错误处理时的注意事项,比如避免无限循环、确保错误处理程序执行后正确退出过程、使用Err对象获取错误信息等。这些注意事项能帮助用户编写更健壮的代码。 最后,根据用户提供的引用内容,引用[1]详细讨论了错误处理机制,引用[2]和[3]提到了VBA的常用用法和代码示例,因此在回答中可以适当引用这些内容来增强权威性。例如,在说明错误处理机制时,可以引用[1]中的描述。 在生成相关问题部分,需要考虑用户可能的后续问题,比如错误处理的最佳实践、其他错误处理语句的区别、如何调试包含错误处理的代码等。这些问题能帮助用户进一步深入学习和解决问题。 总结一下,回答的结构应该是:首先介绍On Error Goto的作用,然后详细说明其用法,接着给出常见示例,再讨论注意事项,最后附上相关问题。这样结构清晰,符合用户的要求。同时,确保使用正确的中文表达和LaTeX格式,如变量使用$...$包裹,独立公式用$$...$$,但在这个问题中可能涉及代码较多,数学公式较少,但如果有的话需要正确应用格式。</think>### Excel VBA中`On Error Goto`用法详解 #### 1. `On Error Goto`的作用 `On Error Goto`是VBA中处理运行时错误的核心语句。当代码执行过程中发生错误时,它会将程序控制权转移到指定的标签位置,避免程序崩溃并允许开发者自定义错误处理逻辑[^1]。 --- #### 2. 基本语法与结构 ```vba Sub Example() On Error Goto ErrorHandler ' 启用错误处理,指向标签ErrorHandler ' 主代码块 ... Exit Sub ' 正常退出,避免进入错误处理块 ErrorHandler: ' 错误处理标签 ' 错误处理代码 ... Resume Next ' 恢复执行错误行的下一行 End Sub ``` **关键点**: - `On Error Goto`必须位于可能出错的代码之前。 - `Exit Sub`用于在无错误时跳过错误处理代码。 - `Resume`语句控制错误处理后的执行位置。 --- #### 3. 常见示例 ##### 示例1:处理文件打开错误 ```vba Sub OpenFile() On Error Goto FileError Workbooks.Open "C:\NonExistentFile.xlsx" Exit Sub FileError: MsgBox "文件打开失败,错误号:" & Err.Number & ",描述:" & Err.Description Resume Next End Sub ``` - 当文件不存在时,跳转到`FileError`提示错误信息[^2]。 ##### 示例2:忽略除零错误 ```vba Sub DivideNumbers() On Error Goto MathError Dim result As Double result = 10 / 0 ' 触发错误 Exit Sub MathError: MsgBox "数学运算错误!" Resume Next End Sub ``` - 捕获除零错误后恢复执行后续代码。 ##### 示例3:类型不匹配处理 ```vba Sub TypeCheck() On Error Goto TypeMismatch Dim num As Integer num = "ABC" ' 类型不匹配 Exit Sub TypeMismatch: MsgBox "输入值类型错误!" Resume Next End Sub ``` --- #### 4. `On Error`的其他形式对比 | 语句 | 行为 | |-----------------------|----------------------------------------------------------------------| | `On Error Goto Label` | 跳转到指定标签处理错误 | | `On Error Resume Next`| 忽略错误,继续执行下一行代码 | | `On Error Goto 0` | 禁用当前错误处理,恢复默认中断行为 | --- #### 5. 注意事项 1. **避免无限循环**:错误处理代码中需确保能退出,例如用`Exit Sub`分隔主代码与错误处理块。 2. **错误信息获取**:使用`Err.Number`和`Err.Description`获取错误详细信息。 3. **作用域限制**:错误处理仅在当前过程中有效,跨过程需单独设置。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值