VBA中的错误处理方法

操作方法

  • 01

    从理论上讲,VBA没有供给任何的过错处置机制,这种被用在微软Office商品中的以Visual Basic言语为根底的脚本言语底子就不要任何的过错处置,当程序呈现过错或发作反常情况时,VBA会主动定位到犯错的代码行,然后提示用户犯错的能够缘由。这是典型的脚本言语的过错提示,联想到JavaScript言语,在浏览器中若是呈现脚本过错,浏览器会给出提示信息,但这并不影响整个程序的正常运转,最多也即是呈现过错之后的脚本不被持续解说罢了。不过即便如此,Javascript仍是供给了较为杰出的过错处置机制,例如常见的try catch句子和alert提示,以及后来撑持的debugger调试信息等,javascript在撑持面向目标言语特性的一起也逐步改进了它的过错处置和调试办法。   可是Visual Basci却没有这么走运,从诞生之初,Visual Basic就没有供给一个对比好的过错处置机制,虽然咱们在实践运用中总会遇到这样或那样的运转时过错(例如过错删去文件、磁盘驱动器空间不行、网络通讯发作反常等),可是关于Visual Basic的进程来说底子就没有过错处置,当过错发作时程序便中止运转,直到反常被铲除。有关对比详细的介绍Visual Basic的过错处置和调试办法的文章,   VBA的言语特性类似于Visual Basic,大概说它们归于同一宗族,所以,用来在Visual Basic中处置程序反常的办法也一样能够被用在VBA中。   在Visual Basic中,常用的程序过错处置的办法是设置或运用过错圈套,以通知运用程序当过错发作时转移到何处(或处置当过错发作时要运转的代码),经过在代码中界说标签来奉告运用程序当过错发作时要转到的当地。这一点和C系列言语的过错处置办法是一样的。根本进程如下:  1. 设置一个有用的过错圈套,以通知运用程序发作过错时转移到何处持续运转。Visual Basic中的On Error句子能够使过错圈套有用,并为运用程序指定过错处置的进口。  2. 在过错程序的进口处编写呼应过错的详细完成,如持续测验履行之前的代码、或奉告用户犯错的详细缘由以让用户测验去处置等。  3. 退出过错处置。   有关怎么运用Visual Basic的过错处置和On Error句子的详细意义,读者能够仔细阅读上面给出的那个连接的文章,里边有十分详细的介绍。我在这里会结合实践运用来讲讲在VBA中怎么详细运用过错处置。   先看一个简略的示例。Private Sub CommandButton1_Click()    On Error GoTo Err_Handle    Dim a As Integer    Dim b As Integer    Dim c As Integer    a = 10    b = 0    c = a / b '除数为0会致使运转时过错    MsgBox c    End SubErr_Handle:    MsgBox Err.DescriptionEnd Sub   在上述进程中,咱们首要经过On Error句子设置了一个过错圈套,该过错圈套将主动被激活,一起过错圈套指向了代码中界说的标签Error_Handle。当进程被调用时,若是呈现反常,程序会主动运转标签所指向的代码段,这里会给用户一个提示。Err目标为体系目标,其间包括了当过错发作时的描绘信息和过错编号,依据Err目标供给的这些简略信息咱们或许能够奉告用户运用程序发作了什么事情,然后结尾找出犯错的详细缘由。   在Visual Basic中,咱们经过On Error句子设置并激活了一个过错圈套,直到程序退出进程或办法,该过错圈套会一向有用。也即是说,咱们需求给每一个进程或办法在需求的时分设置独自的过错圈套,这个有点类似于C的代码中在需求的当地刺进try catch句子,过错处置程序在进程或办法内部界说的标签开端的当地,在程序运转时若是过错没有呈现,则标签之后的代码大概不会被履行到,因而咱们一般都需求在过错处置代码前刺进退出句子,例如End Sub或办法的回来句子。   走运的是咱们一般没有必要为每一个进程或办法界说过错圈套,在VBA中,往往只要一少有些进程或办法需求界说过错圈套,可是不扫除杂乱的VBA运用程序,当代码量到达上千行,进程或办法上百个时,大概不亚于一个小的VB体系,这个时分编写一个专门的过错处置函数仍是很有必要的。在需求进行过错处置的进程或办法中设置好过错圈套和用于处置过错的标签,然后在标签后调用过错处置函数并传入Err目标,由过错处置函数专门处置程序中各种不一样的过错。这个程序看起来大致是下面这个姿态。'-----Err number-----Private Const ErrNoPermissions = -2147217900Private Const ErrCannotLocateURL = -2146697211Private Const ErrDbDenyConnect = -2147217843Private Const ErrCannotFoundDbProvider = 3706'--------------------' Errors handle:' Return    Description' 0         Resume' 1         Resume Next' 2         ErrorFunction ErrorsHandle() As Integer   Dim intMsgType As Integer, intResponse As Integer, strMsg As String   Dim myDoc As Worksheet   Set myDoc = ActiveSheet   Select Case Err.Number          Case ErrCannotLocateURL           ' Error -2146697211             strMsg = "Cannot connect to the Website specified. Please make sure the URL is correct and the website is available."             intMsgType = VBRetryCancel          Case ErrNoPermissions             ' Error -2147217900             myDoc.Protect 'Protect the sheet if current user doesn't have permissions to Access the data             strMsg = "User " & glUserName & " doesnt have permissions to access the data."             intMsgType = vbExclamation          Case ErrCannotFoundDbProvider     ' Error 3706             strMsg = "Please ensure 'Microsoft SQL Server Native Client for SQL2005' installed at first." & _                      "You can download at :http://download.microsoft.com/download/4/4/D/" & _                      "44DBDE61-B385-4FC2-A67D-48053B8F9FAD/sqlncli.msi"             intMsgType = vbExclamation          Case ErrDbDenyConnect             ' Error -2147217843             myDoc.Protect 'Protect the sheet if current user doesn't have permissions to connect the database             strMsg = "Database login failed for user '" & glUserName & "'."             intMsgType = vbExclamation          Case Else               strMsg = "Fatal error." & Err.Description & ".The error number is " & Err.Number             intMsgType = vbCritical   End Select   intResponse = MsgBox(strMsg, intMsgType)   Select Case intResponse          Case 4, 6             ' Retry And Yes             ErrorsHandle = 0          Case 5                ' Ignore             ErrorsHandle = 1          Case Else             ' Cancel and Abort             ErrorsHandle = 2   End SelectEnd Function     略微做一下解说。当程序发作过错时,Err目标的Number特点会回来一个过错代码,ErrorsHandle函数得到这个过错代码并经过Select Case句子逐个比对过错代码,找到事前界说好的过错处置办法然后回来给用户最准确的信息。程序的一开端界说了一组常量用来描绘过错代码所表明的详细意义,在Select Case句子中依据不一样的过错代码回来给用户不一样的过错描绘信息,而且依据过错的品种弹出不一样类型的提示框(如断定、重试、撤销等),这个是由MsgBox常数所决议的,该常数分为许多品种,能够弹出各种不一样类型的提示框,读者能够自个查阅Office协助文档。若是需求,咱们能够随时在Select Case句子中弥补更多的内容来定制内容更丰厚的过错处置办法,而只需求承认何种过错代码代表何种详细的过错信息即可,这个过错信息咱们也能够经过Err.Description特点来获取,虽然这个描绘信息一般都并不那么准确。最终ErrorsHandle函数会回来三种不一样的成果(当然若是需求你能够让这个函数回来更多的值),用以表明调用它的进程或办法怎么持续处置,是停止程序运转,仍是测验再次运转,或许疏忽过错持续运转下面的代码等。

(0)

相关推荐

  • Win10安装中提示错误0xC1900101的多种解决方法

    当您收到尝试安装Win10专业版的0xC1900101错误之一时,通常意味着驱动程序问题 - 解决问题的方法如下.当您尝试将计算机升级到最新版本的Windows 10(例如Fall Creators ...

  • Linux系统中操作文件数过多导致的错误解决方法

    linux 打开文件数 too many open files 解决方法 too many open files出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值. 查看每个用户最 ...

  • OS X Yosemite系统下载失败怎么办?OS X 10.10下载错误解决方法

    苹果在2014年最后一场发布会中结束以后,开放了 Mac 上最新的 OS X Yosemite 系统下载。相信有很多小伙伴在升级更新时,会遇到不少问题,比如下载速度慢,下载错误等。那么OS X Yos ...

  • Linux系统中查找文件的方法

    -name 必须用到的选项。表明要求系统按照文件名查找. 一般格式:find /(dirname) -name filename 具体文件名查找法: 如果知道了某个文件的文件名,而不知道这个文件放到哪 ...

  • 为什么ps不能打字?ps不能打字程序错误解决方法

    为什么ps不能打字?小编带来了ps不能打字程序错误解决方法,当我们需要在图片上输入文字却提示失败的话,该怎么处理这样的问题呢?请看下文介绍吧。 依次打开编辑--首选项---文字,然后在文字后面的选项中 ...

  • 宽带连接错误解决方法大集合

    上网最烦的是什么?网速慢,广告,中病毒等等,其中最让人感到烦恼的莫过于那些莫名其妙弹出的“宽带连接错误XXX”的弹窗警告了,经常在这种时候你是上不了网的,身边有手机还好,刷着流量去百度找帖子解决,身边 ...

  • 为excel vba中添加.删除模块并插入全过程图文详解

    为excel vba中添加、删除模块并插入全过程图文详解 方法/步骤 1、点按快速启动栏excel 程序图标 进入excel 界面 点击选中任意单元格 然后按alt+f11 进入vbe界面 2、点击菜 ...

  • 解决win7系统唤醒休眠状态出现"拒绝访问"错误的方法

    windows休眠状态是指将所有运行的实时数据存储到硬盘上,并且关闭一切不必要的硬件从而节省电量,无论你所使用的windows是哪个版本,系统都能够让用户自动进入休眠状态,当然在你没有关闭休眠功能的前 ...

  • 如何正确解决Win7路由器引入错误的方法

    现在路由器在我们的日常生活中是很常见的一个工具,他可以实现多台电脑同时连网,几乎家家户户都安装了路由器,不仅电脑可以连上网络,连手机.iPad都可以上网了,但是这也带来了一个弊端,就是一旦路由器出现故 ...