良好的错误处理可以防止最终用户看到VBA运行时错误,并帮助开发人员轻松诊断和更正错误。
VBA中有三种主要的错误处理方法,对于分布式程序,应避免使用其中两种方法,除非代码中特别要求。
On Error GoTo 0 'Avoid using
要么
On Error Resume Next 'Avoid using
优先使用:
On Error GoTo <line> 'Prefer using
如果您的代码中未设置任何错误处理,On Error GoTo 0则为默认错误处理程序。在这种模式下,任何运行时错误都会启动典型的VBA错误消息,从而使您可以结束代码或进入debug模式,从而确定源。在编写代码时,此方法是最简单,最有用的方法,但是对于分发给最终用户的代码,应始终避免使用此方法,因为此方法非常难看,并且最终用户很难理解。
On Error Resume Next将导致VBA忽略错误调用之后所有行在运行时引发的任何错误,直到错误处理程序已更改。在非常特定的情况下,此行可能有用,但在这些情况下应避免使用。例如,当从Excel宏启动单独的程序时,On Error Resume Next如果不确定该程序是否已打开,则该调用将非常有用:
'In this example, we open an instance of Powerpoint using the On Error Resume Next call Dim PPApp As PowerPoint.Application Dim PPPres As PowerPoint.Presentation Dim PPSlide As PowerPoint.Slide 'Open PPT if not running, otherwise select active instance On Error Resume Next Set PPApp = GetObject(, "PowerPoint.Application") On Error GoTo ErrHandler If PPApp Is Nothing Then 'Open PowerPoint Set PPApp = CreateObject("PowerPoint.Application") PPApp.Visible= True End If
如果我们不使用该On Error Resume Next调用并且Powerpoint应用程序尚未打开,则该GetObject方法将引发错误。因此,On Error Resume Next有必要避免创建应用程序的两个实例。
注意:最好的方法是在不再需要调用时立即重置错误处理程序On Error Resume Next
建议将这种错误处理方法用于分发给其他用户的所有代码。这使程序员可以通过将代码发送到指定的行来精确控制VBA如何处理错误。标签可以用任何字符串(包括数字字符串)填充,并将代码发送到相应的字符串,后跟冒号。可以通过对进行不同的调用来使用多个错误处理块On Error GoTo <line>。下面的子例程演示了On Error GoTo <line>调用的语法。
注意:必须将Exit Sub行放置在第一个错误处理程序的上方以及每个后续错误处理程序的前面,以防止代码自然地前进到块中而不会调用错误。因此,对于功能和可读性而言,最佳实践是将错误处理程序放在代码块的末尾。
Sub YourMethodName() On Error GoTo errorHandler ' Insert code here On Error GoTo secondErrorHandler Exit Sub 'The exit sub line is essential, as the code will otherwise 'continue running into the error handling block, likely causing an error errorHandler: MsgBox "Error " &Err.Number& ": " &Err.Description& " in " & _ VBE.ActiveCodePane.CodeModule, vbOKOnly, "Error" Exit Sub secondErrorHandler: IfErr.Number= 424 Then 'Object not found error (purely for illustration) Application.ScreenUpdating= True Application.EnableEvents= True Exit Sub Else MsgBox "Error " &Err.Number& ": " & Err.Desctription Application.ScreenUpdating= True Application.EnableEvents= True Exit Sub End If Exit Sub End Sub
如果使用错误处理代码退出方法,请确保进行清理:
撤消部分完成的操作
关闭档案
重置屏幕更新
重置计算模式
重置活动
重置鼠标指针
对对象实例调用卸载方法,该实例在 End Sub
重置状态栏
主要内容:语法错误,运行时错误,逻辑错误,Error对象,错误处理在(VBScript/VBA)编程中有三种类型的错误: 语法错误 运行时错误 逻辑错误 语法错误 语法错误(也称为解析错误)发生在VBScript的解释时间。 例如,下面一行导致语法错误,因为它缺少一个右括号。 运行时错误 运行时错误(也称为异常)在执行期间发生,在解释之后。 例如,下面的行会导致运行时错误,因为这里的语法是正确的,但是在运行时它正在尝试调用,但这是一个不存在的函数。 逻辑错误 逻
我似乎有一个错误,我正在努力找出原因。我已经尝试了帮助部分,也尝试在线研究它,但没有得出任何结果。我希望有人能够帮助我解决这个问题。 问题 我在电子表格上为不同的工作表创建了多个表单。我做了表格,可以用来隐藏/显示用户的判断选择列。我有两种形式可以很好的工作,但是第三种。 我得到 运行时错误438“对象不支持此属性或方法” 这是什么意思?代码与其他表单完全相同。它们之间唯一的区别是床单的名称不同。
我仍然离我要做的很远,但在选择和设置付款期限和到期期限的前几行得到了一个代码 错误是编译错误-对象必需。我不知道是什么。WIP代码复制如下 请帮助编辑#1-2017年9月19日上午3点10分,我的第一个VBA代码终于运行了。它很慢,但它在奔跑。我在代码行“Workbooks(”himanshu.xlsm“).sheet1”.range(“j2”).copy Workbooks(“himanshu.
非常感谢。最好的问候。
在本章中,我们来学习如何逐步编写一个简单的宏。 第1步 - 首先,在Excel 2016中启用“开发者”菜单。要完成这个设置,请点击左上角菜单:文件 -> 选项。如下图所示 - 第2步 - 点击“自定义功能区”选项卡并选中“开发工具”。然后点击“确定”。如下图所示 - 第3步 - “开发工具”功能区出现在菜单栏中。如下图所示 - 第4步 - 点击 “Visual Basic” 按钮打开VBA编辑器
主要内容:应用程序对象,工作簿对象,工作表对象,范围对象使用VBA进行编程时,用户将要处理的重要对象很少。下面是一些常见的对象 - 应用程序对象 工作簿对象 工作表对象 范围对象 应用程序对象 应用程序对象由以下部分组成 - 应用程序范围的设置和选项。 返回顶级对象的方法,比如,等等。 示例 工作簿对象 对象是集合的成员,并包含当前在Microsoft Excel中打开的所有对象。 示例 工作表对象 工作表对象是工作表集合的成员,并包含工作簿中的所有工
都知道学会了英语语法,再加上大量的词汇基础,就算基本掌握了英语了。 类似的要使用vba,也要入乡随俗,了解他的构成,简单的说vba包含数据类型、 变量/常量、对象和常用的语句结构。
我正在制作我的第一个VBA程序,并尝试运行下面的函数。该函数检查第一行的特定命名范围,第一行的值不大于它的前导值,但小于1。 我知道函数做了它应该做的事情,因为我手动检查了值表,从MsgBox中删除了注释',并在函数遍历表时使用调试工具对函数的每个步骤进行了输入和输出。但是,当我在Excel中使用引用函数时,我会得到一个错误。当我开始键入它的名称时,函数甚至会显示在函数自动完成框中。当我编写其他函