http://www.pptjcw.com

excel教程:连代码调试都一窍不通,还谈啥会VBA?

    有句俗话说的好,一段优秀的代码,三分靠编写七分靠调试。今天我就给大家聊一下VBA代码调试的问题:一段代码写完了,运算结果却不对,到底应该如何发现并改正错误?

    本章概要如下:

    ❶ 语法检查
    ❷ 逻辑检查
    ❸ 样本调式
    ❹ 运行调试
    ❺ 错误处理

    1、语法错误

    对于新手而言,初期编写的VBA代码并不会有复杂的逻辑,最常见的错误就是语法错误。
    典型有以下3种。

    1) 声明对象变量,漏了关键字Set。
    Sub t()
    Dim sht As Worksheet
    sht = Worksheets(1)
    MsgBox sht.Name
    End Sub

    以上代码第3行将第1个工作表赋值变量sht,但由于并未使用关键字Set,代码会返回下图所示的错误信息:对象变量或with块变量未设置。

    excel教程:连代码调试都一窍不通,还谈啥会VBA?

    正确代码如下:

    Sub t()
    Dim sht As Worksheet
    Set sht = Worksheets(1)
    MsgBox sht.Name
    End Sub

    2)循环或判断语句不完整。

    当有多层循环语句或者条件判断语句嵌套时,新手朋友容易遗漏Next或者End If语句。需要注意的是,当If语句嵌套在循环语句中时,如果缺少End If,系统会提示”编译错误,Next没有For”。这提示张冠李戴的不要太明显。

    以下代码缺失End If语句。

    Sub t3()
    Dim sht As Worksheet
    For Each sht In Worksheets
    If sht.Name = "看见星光" Then
    If sht.Cells(1, 1) = "excel" Then
    MsgBox "对"
    '这里少了End If 你发现了吗?
    Next
    End Sub

    运行后提示错误如下:

    excel教程:连代码调试都一窍不通,还谈啥会VBA?

    解决此类错误,最好是养成代码缩进与提前输入结构语句的习惯。关于代码缩进的规则,VBA系列教程里有详细的讲述,这里不再啰嗦。而输入结构语句是指…
    写了For语句后,立刻空两行写Next语句,再在循环体中编写其它语句。
    For Each sht In Worksheets

    Next
    写了If语句后,也空两行写End If语句。
    If sht.Name = "看见星光" Then

    End If

    3)工作表对象缺失

    这个错误基本上每个VBA学员都遇见。
    有段代码如下:
    代码看不全可以左右滑动…

    Sub t4()
    Dim arr
    arr = Worksheets(1).Range("a1:b" & Cells(Rows.Count, 1).End(xlUp).Row)
    End Sub

    第3行代码将第1个工作表的A:B列数据区域赋值数组arr。其中
    Cells(Rows.Count, 1).End(xlUp).Row部分,
    本意是返回Worksheets(1)第1列最后一个存在数据的单元格的行号,这代码看起来似乎正常无误。
    但是,我们在VBA教程里讲过,如果单元格前未指定工作表对象,则默认为当前活动工作表——当前活动工作表,未必就是Worksheets(1),代码运行后,arr数组也就未必会返回正确的结果。

    正确代码参考如下:

    Sub t4()
    Dim arr
    With Worksheets(1)
    arr = .Range("a1:b" & .Cells(Rows.Count, 1).End(xlUp).Row)
    End With
    End Sub

    注意Cells前有个.代表With所引用的Worksheets(1)对象。

    2、逻辑错误

    相比于语法错误,麻烦的是逻辑错误。
    代码运算的逻辑,有些来源于数据分析与处理的基本逻辑,有些来源于公司的业务逻辑。对于后者,往往只有行业内的人才能通过你的描述快速理解。
    这时就有可能发生这样的情景:有的朋友发出来一段代码,也不说运算逻辑,就问为什么代码运行后不提示错误,但结果并不对……
    坦白的说,这种行为就给有人问为什么输入公式1+1不提示错误,但结果也不等于预想的3,差不了多少——就让人很无语。

    如何梳理逻辑错误呢?
    首先,正如我们一直强调的,所谓编程,就是顺序、分支和循环。顺序就是运算的先后顺序,分支就是运算的条件层次,循环就是遍历数据,所以请养成做思维导图的习惯,通过思维导图梳理清楚代码运算的顺序和条件层次——相信我,这非常有助于你快速而准确的编写代码。
    然后,在代码中尽量增加注释。注释的好处我们在VBA系列教程中编写VBA代码有哪些注意事项里有详细解释,像我这么傲骄的人,这里不再重复,你懂得图片。

    最后,请继续往下看(*^▽^*)

    3、样本调试

    不论是检查代码的语法错误还是逻辑错误,都离不开样本调试;也就是用一个样本数据逐步运行代码,发现并修正错误。上面这句话包含了两个重点词汇:样本数据、逐步运行。
    样本数据要求小而全。

    excel教程:连代码调试都一窍不通,还谈啥会VBA?

    提示:如果您觉得本文不错,请点击分享给您的好友!谢谢

    上一篇:表格制作快速入门:全了,SUBSTITUTE函数常用套路集合! 下一篇:表格制作快速入门:10个动画,告诉你Excel排序怎么用

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。