欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    14Excel VBA 学习总结善待异常.docx

    • 资源ID:3142160       资源大小:39.32KB        全文页数:6页
    • 资源格式: DOCX        下载积分:6.99金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要6.99金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    14Excel VBA 学习总结善待异常.docx

    14Excel VBA 学习总结 善待异常Excel VBA 学习总结 - 善待异常 “生活就像一面镜子,你怎么对待她,她就怎么对待你”。这句话放到异常处理中就再合适不过了;每一门语言都提供了异常处理机制;合理有效的避免、处理错误与异常,也是编程中不可回避的内容。 主流的开发语言,基本上都提供了类似于try/catch的异常处理机制;某些语言,例如C+与Jave,甚至还可以为函数声明可能出现的异常。这些手段结合起来基本上可以把异常消弭在萌芽状态,还程序一个安全的运行空间。对于这个方面,很遗憾,VBA做的不是太好;下面我总结一下异常处理几种常见的方式。 1. 使用保卫语句,尽量避免出现异常 异常,通常指的是程序处于未定义的状态,执行未定义的行为。在大多数情况下,程序的状态都在我们的控制之中,对于一些异常的情况,我们也是可以预料到的,并可以辅助以各种判断语句加以保护,避免异常的出现;这些语句通常就叫做“保卫语句”。采用“保卫语句”,我们可以避免大部分异常情况,这是程序设计中很常用的一项技巧。毕竟异常是程序的非法状态,不仅异常处理语句的执行效率很低,而且需要我们耗费很多的时间去调试和处理。所以如果有可能事先处理掉错误和异常,这对于程序的开发和执行都是相当有益的。看一个小例子: Public Sub Sample Dim i As Integer Dim j As Integer '使用i与j完成一些语句 '. '后面除法的保卫语句 If j = 0 Then MsgBox "除数不能为0." End If MsgBox i / j End Sub 2. VBA可以提前编译,发现部分异常 VBA程序可以在运行前编译一下,这时某些异常是可以提前发现的,比如变量类型没有定义的情况(Option Explicit开启的时候)。做法是在VBA编辑器中,点击“Debug”下面的“Compile VBAProject”菜单就可以编译一下程序。 3. VBA中的异常处理 使用保卫语句,我们能避免相当一部分异常,但是还是有很多其它的异常,我们是难以预料的。所以还需要设计其它的途径捕获这些错误。在VBA中可以使用On Error语句和Resume语句处理异常。 On Error语句 这个语句是VBA异常处理的核心语句,它指明了当异常发生时程序应该做的动作。它有下面几种形式: On Error Goto 0 On Error Resume Next On Error Goto <label>: 第一种形式,On Error Goto 0, 是VBA的默认模式。使用它的时候,一旦遇到运行时的错误,它就显示一个标准的错误信息对话框,告诉用户错误的类型并可以进行调试。这是VBA的默认行为,与没有设置异常处理是一样的。所以一般并没有人使用。 第二种形式,On Error Resume Next ,是比较常用,但是也常常误用的一种方式。使用这种形式的时候,一旦遇到错误,它就跳到错误发生位置的下一行继续执行。这个时候如果出错的情况并不影响程序的正常功能,我们可以修复并跳过去执行;但是更多的等情况是,我们需要使用的很多状态是与出错的语句是相关的,不能直接跳过。这个时候,我们可以测试Err对象的Number属性是否等于0来判断出现的问题,并妥善解决。例如: On Error Resume Next N = 1 / 0 ' cause an error If Err.Number <> 0 Then N = 1 End If 第三种形式, On Error Goto <label>:,是最常用的方式。这个语句告诉VBA,当出现异常的时候,跳到Label标识的异常处理块去执行。例如: On Error Goto ErrHandler: N = 1 / 0 ' cause an error ' ' more code ' Exit Sub ErrHandler: ' error handling code Resume Next End Sub 请注意Exit Sub语句的作用,它会隔开正常的程序流程与异常处理块。 Label标识的通常就是异常处理语句,这些语句是用于解决程序的问题并继续执行程序。 通常不可以使用这种方式简单的去跳过几行语句。例如下面的语句是不能工作的: On Error GoTo Err1: Debug.Print 1 / 0 ' more code Err1: On Error GoTo Err2: Debug.Print 1 / 0 ' more code Err2: 当第一个错误发生的时候,程序跳到Err1位置执行,这个时候异常处理正在继续,如果这个时候遇到第二个异常,第二个异常是不会被On Error 语句捕获的。 Resume语句 Resume语句是指示程序到指定的位置继续执行。它只可以在异常处理块中使用,在程序其它位置使用时非法的。它有3种使用方式: Resume Resume Next Resume <label>: 单独使用Resume的时候, 程序会在出错的位置继续执行。所以应该要保证错误已经被修复;否则的话,程序可能会陷入死循环中。下面是一个典型的使用场景:激活一个不存在的Worksheet,在异常处理块中修复了问题并从出错位置继续执行。 On Error GoTo ErrHandler: Worksheets("NewSheet").Activate Exit Sub ErrHandler: If Err.Number = 9 Then ' sheet does not exist, so create it Worksheets.Add.Name = "NewSheet" ' go back to the line of code that caused the problem Resume End If 第二种形式是Resume Next。 使用它会使程序从出错的位置的下一行继续执行。例子如下: On Error GoTo ErrHandler: N = 1 / 0 Debug.Print N Exit Sub ErrHandler: N = 1 ' go back to the line following the error Resume Next 第三种形式是Resume <label>:。 它指示程序跳到指定的位置继续执行,例如: On Error GoTo ErrHandler: N = 1 / 0 ' code that is skipped if an error occurs Label1: ' more code to execute Exit Sub ErrHandler: ' go back to the line at Label1: Resume Label1: 这几种形式的Resume语句都会清空Err对象。 4. 通用异常处理函数 使用On Error语句可以处理每个函数的异常,但是对于一个程序,出错的可能性就是那么几种,很多时候都是重复在处理这几个异常。这个时候,可以提供一个公用的异常处理函数,如下面例子所示: Public Function ErrorsHandle As Integer '错误处理情况 Select Case Err.Number Case '生成错误信息. Case Else '. End Select '询问用户 dialogResult = MsgBox(.) Select Case dialogResult Case 4, 6 ' Retry And Yes ErrorsHandle = 0 Case 5 ' Ignore ErrorsHandle = 1 Case Else ' Cancel and Abort ErrorsHandle = 2 End Select End Function Private Sub Sample On Error GoTo Error_Handle '. Exit Sub Error_Handle: errNum = ErrorsHandle If errNum = 0 Then Resume ElseIf errNum = 1 Then Resume Next Else Exit Sub End If End Sub 其实有时候我们可以利用异常,达到我们其他的目的,比如激活Worksheet那个,我们可以间接判断出那个Worksheet存不存在。我们可以通过这种变相的方式可以实现一些查询的目的。但是通常,能用其他简单方式去实现的,尽量不要使用异常处理去实现类似功能。

    注意事项

    本文(14Excel VBA 学习总结善待异常.docx)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开