调试Excel VBA代码
目录
1编译错误
2运行中出错或者运行结果错误
Excel VBA出错时给出的错误信息极少,需要充分利用各种工具来进行调试。
1.编译错误
常见的编译错误有:
错误的源代码格式,比如if后面缺少then:在编辑器中该行会变成红色。
错误的语法结构,比如if和end if没有对应上:代码运行前会给出编译错误提示。
类型不匹配:函数输入的参数与定义时的参数类型不同时会出现该类错误。
变量未定义:指使用了没有申明的变量类型(当Option Explicit时)
建议:
格式规范化,严格缩进。VBA插件Smart Indent是一个很好的辅助工具。这样做让源代码更具备可读性,从而更快检测源代码格式和语法结果错误,。
勾选上“工具——选项——编译器——要求变量声明”,或者在每个代码模块最前面手工加上 Option Explicit 。在代码编辑中,很多错误只是因为手误,这个选项会让编译器强制检查变量申明,从而在编译时便发现错误。
2.运行中出错或者运行结果错误
当程序编译没有问题,但运行中出错或者运行的结果与想象中不符,就需要用到VBA的调试功能。下面是VBA提供的几个重要的调试功能,这些功能能让程序停在某些特定的位置上等待检查:
F9:设置程序断点,在代码左侧栏点击有相同效果。重新按F9即取消断点。
F8:单步跟踪,当调用子函数会跟踪到子函数内部
Shift+F8:单步跟踪,但不会进入子函数内部
Ctrl+Shift+F8:跳出正在跟踪的函数,直接返回上一层函数。
F5:运行程序,直到出现错误、程序结束或程序断点为止
Ctrl+F8:运行程序,直到出现错误、程序结束、程序断点或当前光标所在行为止
debug.print var:在立即窗口中显示var的值
debug.assert var:当var==false时程序自动停止
以上命令也可在菜单和命令栏中获取。
在调试过程中,可通过下面几种方法查看各个变量的值,当变量和预期不一样时,也就找到了程序出错的原因,便能对照修改:
立即窗口(快捷键Ctrl+G):在该窗口里会显示debut.print的结果值,以及随时计算和运行代码。在代码前面添加“?”,可以在立即窗口中显示运行结果。
监视窗口:可以将变量以及表达式添加到监视窗口,可以实时查看变量和表达式的值。支持将代码窗口里的变量和表达式拖入到见识窗口
本地窗口:本地窗口里可以查看目前的local变量和global变量的变量值。
编辑窗口:将鼠标停在编辑窗口的变量上可显示该变量的值。
有一些方法可减少程序错误以及降低调试的难度:
添加重要的代码注释。
源代码格式规范化,增加代码可读性。VBA插件Smart Indent是一个很好的辅助工具。
尽可能声明变量类型,少用Variant变量。
注意函数的参数传递方式,默认为传引用,子函数会修改变量的值。
尽量将功能函数化,不同的功能分开写。
避免在VBA中引用绝对地址,如Range("A1")。可先在Excel中定义名称"abc=$A$1",然后引用Range("abc")。
避免使用ActiveSheet, ActiveWorkbook等可变变量,用Sheet1,ThisWorkbook这种绝对变量。绝对变量不受外界操作影响。
access vba 表达式中函数未定义 vba变量未定义
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
ACCESS sum未定义 access中函数未定义
1、编译gsf报了一个错误:严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0020 未定义标
ACCESS sum未定义 mbsystem sqlite 禁止显示 无法解析 -
android函数未定义 未定义函数或变量data
在学习BP神经网络时,进行英文字母识别,但是运行出现错误 -- 未定义函数或变量 'prprob'。
android函数未定义 MATLAB 工作区 不同版本 -
java注解里面不能调用静态函数
前言 java反射和注解在java里面很重要,但是很多人对这方面的知识理解不是很好,我来说说我自己对java反射和注解的理解,这两块内容本来应该出在一个博客文章里面讲解,但是由于我的java反射说的内容有点小多,然后我就分开将讲解一下。目录注解的概念注解的类别注解用法通过反射获取注解反射注解一起使用拼写SQL语句实战演练注解的概念java注解:比较官方的说法:从
java注解里面不能调用静态函数 java case用法 java resume过时方法 java 实体类 临时注解 java 注解