excel宏专项学习13_第1页
excel宏专项学习13_第2页
excel宏专项学习13_第3页
excel宏专项学习13_第4页
excel宏专项学习13_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第13学时错误处理在前一学时里,我们已经学习了有关调试方面的内容,所谓调试,就是对可以预测的问题进行处理并进行纠正的过程。但是,如果问题是不可控制和不可预测的话,应该怎么处理呢?除非程序员开发的应用程序很小,否则,就没有办法预测到应用程序运行时可能发生的所有问题。开发人员不能够控制操作系统、也不能够控制硬件平台的选配,而且肯定不能够控制用户的操作。这个学时中要学习的重点包括: 错误处理是什么 设置错误捕获 编写错误处理实用程序 提供从错误处理程序跳出的出口 创建集中的错误处理程序13.1 错误处理新术语为了处理突发事件,开发人员需要编写错误处理程序。所谓错误处理程序,就是应用程序中用来捕获和

2、处理错误的实用程序。错误处理程序的开发过程可以分为下面三个步骤:1)设置错误捕获错误。2)编写错误处理实用程序错误处理实用程序就是当错误发生时程序要跳转到的地方。3)提供从错误处理程序跳出的出口事情。换句话说,就是当错误处理完毕时,需要程序做的当设置错误捕获时,就是告诉程序当错误发生时,到什么地方去捕获13.2 步骤1:设置错误捕获设置错误捕获就是告诉V B A 捕获错误的位置,是通过On Error语句来实现的。在一个给定的程序中,任何一个时刻只能够启用一个错误捕获。当然,这不是意味着过程就只能够拥有一个On Error语句,而是说,如果过程中有多个On Error语句的话,只有最近正在执行

3、的那个捕获陷阱才是起作用的。新术语处理错误有两种不同的方式,其中之一是执行内联错误处理。内联错误处理在On Error语句中有一些指令来处理错误。要执行内联错误处理的话,可以使用下面语句中的任何一句: On Error Resume 如果有运行时刻的错误发生,那么程序将从导致错误发生的语句处重新开始执行。 On Error Resume Next 如果有运行时刻的错误发生,那么程序就从导致错误发生的语句的下一句继续执行下去。 要禁止错误的处理程序,可以在程序中初始化On Error语句以后,使 用On Error GoTo 0语句。在测试程序或过程并且不想启用错误处理时,禁止错误处理程序是非常

4、有用的。错误处理的两种不同处理方式中,不推荐使用内联错误处理方法,最好是采用错误捕获的处理方式,采用错误捕获能够跳转到错误处理实用程序,这样的方式使开发人员能够对各种各样的错误进行灵活的处理。为了设置能够跳转到错误处理实用程序的错误捕获,可以使用On Error GoTo“行”语句,这里“行”代表的是位于错误处理代码前面的行标号。要创建行标号的话,只要为该行输入一个名称,后面跟一个冒号就可以了。V B A 中的行标号需要独占一行。程序清单1 3-1给出了包含有错误处理实用程序的过程的基本框架。程序清单13-1 包含错误处理实用程序的过程的基本框架1: Sub WithErrorHandler

5、(2: On Error GoTo ErrorHandler3: ' The body of the procedure goes here.4: .5: .6: .7: ' The next statement, Exit Sub or Exit Function (whatever is8: ' appropriate,goes before the line label for the error handler.9: ' This is done so that if there are no errors, the error-10: ' ha

6、ndling routine is skipped.11: Exit Sub12: ' The next line is the line label for the error-handling13: ' r o u t i n e .14: ErrorHandler:15: ' The code for the error handler goes here.16: .17: .18: .19: End Sub13.3 步骤2:编写错误处理实用程序当错误发生时,V B A 就查找程序中的行标号,并开始跳转到行标号所在的位置继续执行。错误处理实用程序的代码评估所发生的

7、错误并采取相应的措施。评估处理过程要么是采用I f 语句、要么是采用S e l e c t 语句来完成的,在这两个语句中,应该总是包括E l s e 子句,用它来处理那些所有没有预料到的错误。13.4 步骤3:提供从错误处理程序跳出的出口你也许想知道错误处理程序的I f 或者S e l e c t 语句中那些条件的使用方法,下面简单介绍。你将测试E r r 对象的N u m b e r 属性的值,N u m b e r 属性是该对象的默认属性。E r r 对象包含了有关运行时刻错误的信息,它的N u m b e r 属性可以用来返回由发生错误所指定的一个数值(每个错误对应一个数值),一旦明确了

8、所发生的错误以后,就有如下四种选择: Resume 返回到导致错误发生的语句。 Resume Next 返回到导致错误发生的语句的下一行语句。 Resume “行”跳转到程序中行标号标明的行。 End 结束过程或者整个应用程序。13.5 综合既然已经学习了创建错误处理程序的所有理论,下面就可以开始把理论应用到实际中了:在工作簿中添加一个新模块。要创建一个包含有错误处理程序的过程的话,请执行下面的步骤:1)创建一个新过程,命名为E r r o r E x a m p l e 。2)在过程中输入下面的代码:Dim sngValue As Single, sngDivideBy As Single,

9、 sngAnswer As SingleDim iResponse As IntegerOn Error GoTo ErrorZones n g V alue = InputBox("Enter the number you wish to divide: "sngDivideBy = InputBox("Enter the number you wish to divide by: "sngAnswer = sngValue / sngDivideByMsgBox "The answer is "& sngAnswerExi

10、t SubE r r o r Z o n e :Select Case ErrCase 7MsgBox "Out of Memory" & _Chr(13 & "Close nonessential applications. "ResumeCase 35 To 51MsgBox"Contact the Help Desk. "Case 11M s g B o x " Y ou can' t divide by zero. "Case ElseMsgBox"Unrecoverabl

11、e error.Exiting application. "E n dEnd Select3)运行该过程,在第一个输入框中输入1 0。4)在第二个输入框中输入0,当按下回车键以后,就可以看见一个错误消息显示出来。这是因为试图被0除,从而导致错误发生。5)单击“确定”按钮来关闭消息对话框。可以使用E r r o r 函数来显示与发生的错误相关联的文本信息。要修改过程来使用E r r o r 函数的话,请完成下面的步骤:1)修改E r r o r E x a m p l e 过程,使它跟下面的代码一样(修改的部分用黑粗体字标出):Private Sub ErrorExample (Dim

12、 sngValue As Single, sngDivideBy As Single, sngAnswer As SingleDim iResponse As IntegerOn Error GoTo ErrorZone s n g V alue = InputBox("Enter the number you wish to divide: "sngDivideBy = InputBox("Enter the number you wish to divide by: "sngAnswer = sngValue / sngDivideByMsgBox

13、"The answer is " & sngAnswerExit SubE r r o r Z o n e :Select Case ErrCase 7MsgBox"Out of Memory" & _Chr(13 & "Close nonessential applications. "R e s u m eCase 35 To 51MsgBox"Contact the Help Desk. "Exit SubCase 11M s g B o x " An error has o

14、ccurred: " & ErrorCase ElseMsgBox "Unrecoverable error.Exiting application. "E n dEnd SelectEnd Sub2)运行该过程,在第一个输入框中输入5。3)在第二个输入框中输入0,当按下回车键时,就可以看到一条错误消息显示出来,该消息显示了跟错误消息相关联的文本,如图1 3-1所示。图13-1 这个消息对话框使用了由E r r o r 函数产生的文本4)单击“确定”按钮关闭该消息对话框。你也许在想“我实在不想为每个过程都编写一个错误处理实用程序”,实际上也没有这个必要。在

15、下面的介绍中,将学习怎样创建一个集中的错误处理程序。 114 新术语 使用中文Excel 2000编程 24学时教程 下载 13.6 创建集中的错误处理程序 可以创建集中的错误处理程序来代替在每个过程中创建一个错误处理实用程序。集 中式错误处理程序是一个函数,它对所发生的每个错误进行处理,然后基于不同的错误号码 采取不同的措施。程序中需要进行错误处理的每个过程中仍然需要有 On Error语句,该语句跳 转到拥有Select Case语句的应用程序某个区域中, Select Case语句能够处理有集中式错误处理 程序返回的结果。 Select Case语句有五种可能的情况: 执行Resume。

16、 执行Resume Next。 执行Resume “行” 。 退出该过程。 结束整个应用程序。 对应于每个错误,从集中式错误处理程序会返回一个相应的值到局部过程中,这个值的 范围是 15。局部过程就使用这个返回值初始化相应措施。理解这个过程的最好方式就是实 践。要添加集中式错误处理程序的话,请执行下面的步骤: 1)添加一个模块到工作簿中,创建一个函数,命名为 H a n d l e E r r o r s,要确保它是一个 函数。 2)为该函数输入下面的代码: Function HandleErrors(iErrNum As Integer Select Case iAction Case 5

17、'Invalid procedure call MsgBox Error(iErrNum & " Contact Help Desk." iAction = 2 Case 7 'Out of memory MsBox "Close all unnecessary applications. " iAction = 1 Case 11 'Division by zero MsgBox "Zero is not a valid value. " iAction = 1 Case 48, 49,51 '

18、;Error in loading DLL MsgBox iErrNum & "Contact Help Desk. " iAction = 5 Case 57 'Device I/O error MsgBox "Insert Disk in Drive A." iAction = 1 Case Else MsgBox "Unrecoverable Error. " iAction = 5 End Select 下载 ErrorHandler = iAction End Function 第13学时 错 误 处 理使用

19、 115 3)找到ErrorExample过程(它在另外一个模块中,而不是在当前模块中) 。 4)修改该过程,使它同下面的代码一样(修改部分用黑粗体字标出) : Private Sub ErrorExample ( Dim sngValue As Single, sngDivideBy As Single, sngAnswer As Single Dim iResponse As Integer On Error GoTo ErrorZone sngValue = InputBox("Enter the number you wish to divide: " sngDiv

20、ideBy = InputBox("Enter the number you wish to divide by: " sngAnswer = sngValue / sngDivideBy MsgBox "The answer is " & sngAnswer Exit Sub ErrorZone: 'This Select statement uses the value returned 'from the HandleErrors function for its condition. Select Case HandleE

21、rrors(Err Case 1 Resume Case 2 Resume Next 'This procedure doesn't need case 3 which is resuming to a line. Case 4 Exit Sub Case 5 End End Select End Sub 5)运行该过程。 6)在第一个输入框中输入 8。 7)在第二个输入框中输入 0,按回车键后将发生错误。 8)单击“确定”按钮关闭该消息对话框。 通过跳转到集中式错误处理函数、然后执行局部过程中的 R e s u m e、Resume Next或者其 他必要的语句,这样就可以确保 VBA在错误发生以后能够从合适的位置继续执行下去。 该方法也允许在局部过程的错误处理实用程序中放置自定义代码,比如放置某个消息等, 需要在想要支持错误处理的所有过程中都放置自定义代码。 只需要一次创建集中式错误处理程序,在将来的应用程序中,通过复 制和粘贴该函数就可以重复使用它了。 13.7 学时小结 调试只能够发

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论