《13中文 Excel 2000 编程 24 学时教程.pdf》由会员分享,可在线阅读,更多相关《13中文 Excel 2000 编程 24 学时教程.pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
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 WithErro
5、rHandler ()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 is 8: appropriate),goes before the line label for the error handler.9: This is done so that if there are no errors, the error-10: handling routine is
6、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就查找程序中的行标号,并开始跳转到行标号所在的位置继续执行。错误处理实用程序的代码评估所发生的错误并采取相应的措施。评估处理过程要么是采用 I f语句、要么是采用S e
7、 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属性可以用来返回由发生错误所指定的一个数值(每个错误对应一个数值) ,一旦明确了所发生的错误以后,就有如下四种选择:第13学时 错 误 处 理使用111下载 Re
8、sume 返回到导致错误发生的语句。 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, sngAnswer As SingleD
9、im iResponse As IntegerOn Error GoTo ErrorZones n g Value = InputBox(Enter the number you wish to divide: )sngDivideBy = InputBox(Enter the number you wish to divide by: )sngAnswer = sngValue / sngDivideByMsgBox The answer is & sngAnswerExit SubE r r o r Z o n e :Select Case ErrCase 7MsgBox Out of M
10、emory & _Chr(13) & Close nonessential applications. Resume Case 35 To 51MsgBoxContact the Help Desk. Case 11M s g B o x You cant divide by zero. Case ElseMsgBoxUnrecoverable error.Exiting application. E n dEnd Select3)运行该过程,在第一个输入框中输入 1 0。4)在第二个输入框中输入 0,当按下回车键以后,就可以看见一个错误消息显示出来。这是因为试图被0除,从而导致错误发生。5)
11、单击“确定”按钮来关闭消息对话框。可以使用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 sngValue As Single, sngDivideBy As Single, sngAnswer As SingleDim iResponse As IntegerOn Error GoTo ErrorZone112使用中文Excel 2000编程 2
12、4学时教程下载s n g Value = InputBox(Enter the number you wish to divide: )sngDivideBy = InputBox(Enter the number you wish to divide by: )sngAnswer = sngValue / sngDivideByMsgBox The answer is & sngAnswerExit SubE r r o r Z o n e :Select Case ErrCase 7MsgBoxOut of Memory & _Chr(13) & Close nonessential ap
13、plications. R e s u m eCase 35 To 51MsgBoxContact the Help Desk. Exit SubCase 11M s g B o xAn error has occurred: & ErrorCase ElseMsgBox Unrecoverable error.Exiting application. E n dEnd SelectEnd Sub2)运行该过程,在第一个输入框中输入 5。3)在第二个输入框中输入 0,当按下回车键时,就可以看到一条错误消息显示出来,该消息显示了跟错误消息相关联的文本,如图 1 3 - 1所示。4)单击“确定”按
14、钮关闭该消息对话框。你也许在想“我实在不想为每个过程都编写一个错误处理实用程序” ,实际上也没有这个必要。在下面的介绍中,将学习怎样创建一个集中的错误处理程序。第13学时 错 误 处 理使用113下载图13-1 这个消息对话框使用了由E r r o r函数产生的文本13.6 创建集中的错误处理程序新术语可以创建集中的错误处理程序来代替在每个过程中创建一个错误处理实用程序。集中式错误处理程序是一个函数,它对所发生的每个错误进行处理,然后基于不同的错误号码采取不同的措施。程序中需要进行错误处理的每个过程中仍然需要有 On Error语句,该语句跳转到拥有Select Case语句的应用程序某个区域
15、中,Select Case语句能够处理有集中式错误处理程序返回的结果。Select Case语句有五种可能的情况: 执行R e s u m e。 执行Resume Next。 执行Resume “行” 。 退出该过程。 结束整个应用程序。对应于每个错误,从集中式错误处理程序会返回一个相应的值到局部过程中,这个值的范围是15。局部过程就使用这个返回值初始化相应措施。理解这个过程的最好方式就是实践。要添加集中式错误处理程序的话,请执行下面的步骤:1)添加一个模块到工作簿中,创建一个函数,命名为H a n d l e E r r o r s,要确保它是一个函数。2)为该函数输入下面的代码:Funct
16、ion HandleErrors(iErrNum) As IntegerSelect Case iActionCase 5Invalid procedure callMsgBox Error(iErrNum) & Contact Help Desk.iAction = 2Case 7Out of memoryMsBox Close all unnecessary applications. iAction = 1Case 11Division by zeroMsgBox Zero is not a valid value. iAction = 1Case 48, 49,51Error in l
17、oading DLLMsgBox iErrNum & Contact Help Desk. iAction = 5Case 57Device I/O errorMsgBox Insert Disk in Drive A.iAction = 1Case ElseMsgBox Unrecoverable Error. iAction = 5End Select114使用中文Excel 2000编程 2 4学时教程下载ErrorHandler = iActionEnd Function 3)找到E r r o r E x a m p l e过程(它在另外一个模块中,而不是在当前模块中) 。4)修改该
18、过程,使它同下面的代码一样(修改部分用黑粗体字标出) :Private Sub ErrorExample ()Dim sngValue As Single, sngDivideBy As Single, sngAnswer As Single Dim iResponse As IntegerOn Error GoTo ErrorZones n g Value = InputBox(Enter the number you wish to divide: )sngDivideBy = InputBox(Enter the number you wish to divide by: )sngAns
19、wer = sngValue / sngDivideByMsgBox The answer is & sngAnswerExit SubE r r o r Z o n e :This Select statement uses the value returnedfrom the HandleErrors function for its condition.Select Case HandleErrors(Err)Case 1Resume Case 2Resume NextThis procedure doesnt need case 3 which is resuming to a lin
20、e.Case 4Exit SubCase 5E n dEnd SelectEnd Sub5)运行该过程。6)在第一个输入框中输入8。7)在第二个输入框中输入0,按回车键后将发生错误。8)单击“确定”按钮关闭该消息对话框。通过跳转到集中式错误处理函数、然后执行局部过程中的 R e s u m e、Resume Next或者其他必要的语句,这样就可以确保V B A在错误发生以后能够从合适的位置继续执行下去。该方法也允许在局部过程的错误处理实用程序中放置自定义代码,比如放置某个消息等,需要在想要支持错误处理的所有过程中都放置自定义代码。只需要一次创建集中式错误处理程序,在将来的应用程序中,通过复制和
21、粘贴该函数就可以重复使用它了。13.7 学时小结调试只能够发现可以预测的错误,要处理不可预测的和不可避免的错误时,就必须使用错误处理。通过启用错误处理,就可以使应用程序更稳定、更健壮。如果应用程序中包含了好几个过程,那么可以考虑采用集中式错误处理程序。第13学时 错 误 处 理使用115下载13.8 专家答疑问题:如果需要强制一个错误发生,该怎么实现呢?解答:可以使用R a i s e函数来强制发生错误,这在测试处理过程中很有用,另外在最终应用程序的某些情况下也可能有用。问题:有一个过程要被另外一个过程调用,该过程没有错误处理程序,但是主调过程有,那么当错误发生时,将发生什么事情呢?解答:如果
22、过程被另外一个过程调用、并且没有错误处理程序的话, V B A将在主调过程中查找错误处理程序。13.9 课外作业思考题和练习题是为了使你能够进一步地理解所学内容。答案请参考附录。13.9.1 思考题1)创建错误处理程序的三个主要步骤是什么?2)用来返回错误号码的对象及其属性的名称是什么?3)哪条语句能够把流程跳转到导致错误发生的代码行?4)为了把某行变为行标号,该行最后要放置哪个字符?5)哪条语句能够把流程跳过导致错误发生的代码行?6)判断题:每个过程都必须有自己的错误处理实用程序。7)当创建错误处理程序时,哪种逻辑结构最好?13.9.2 练习题创建下面的过程:Sub ProcWi t h E r r o r ( )Workbooks.Open C: nosuchfile.wkbEnd Sub添加代码来实现一个错误处理程序,该错误处理程序哪个显示一条消息,并且从导致错误发生的代码行的下一行继续执行。116使用中文Excel 2000编程 2 4学时教程下载