VBA宏编程操作指南

更新时间:2023-05-14 06:33:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

VBA宏编程操作指南

修订记录版本 V1.0 日期 2011-3-17 作者 jingpengtao 说明 VBA基础教程,不用自己写代码,不 用看懂代码也可以写出适合自己工作 的宏。

目录1.1 1.2 1.3 1.4 1.5 1.6 1.7 第一部分:关键代码解释 ......................................................................................... 3 第二部分:如何录制宏 ............................................................................................. 9 第三部分:实例解释如果编写宏 ........................................................................... 10 第四部分:如何确定在哪个位置插入关键代码呢? ........................................... 20 第五部分:如何调试宏 ........................................................................................... 20 第六部分:分块合成 VBA 代码............................................................................... 22 第七部分:个人心得 ............................................................................................... 25

1 / 25

VBA宏编程操作指南

序:EXCEL 在我们平时的生活工作中有着广泛和重要的应用,尤其是对于每天和大量数 据打交道的人员更重要,但同时对大量数据的操作又显得是那么的繁琐,一不小心就很 容易出错,对于每天都需要用 EXCEL 做同样事情的人来说,要是能够有一种工具来自动 做工作就好了。 EXCEL 宏就是一个解决此类问题的办法,编写好一个实用的 EXCEL 宏可以大幅度提 高工作效率和质量,因此掌握宏编程显得尤为重要。 但是并不是每个人都学过编程,都了解 VBA 语言,那么怎样才能快速学习和掌握 应用宏呢? 下面我就根据我个人的学习经验及理解来教大家如何学习 VBA 编程。 不需要理解代码的含义,不需要知道哪一步操作是什么代码,只要你会复制粘贴, 就能够写出 EXCEL 宏,提高你的工作效率。 俗话说: “授之以鱼,不如授之以渔” ,所以替人写宏不如教给他方法,也方便各自 修改。 学完本教程,写一些简单的宏肯定可以。编写本教程的目的就是为了方便经常和数 据打交道的同事朋友,能够各自根据需要编写自己的宏。

备注:由于本教程 V1、0 版本只是针对从未接触过 VBA 语言及刚入门的人员编写 的,并未涉及更详细的代码分析及条件语句,循环语句,数据语句等,将会在后期的 版本更新中不断完善。

由于编者水平经验有限,难免会有一些不足之处,还望多多包涵。

2 / 25

VBA宏编程操作指南

第一部分: 1.1 第一部分:关键代码解释1、 Dim str As String str = ThisWorkbook.Path & "\***.xls" Workbooks.Open str 代码解释:自动打开文件名为“***” ,属性为 xls 的文件。同时 xlsx,csv 文件也可打开。 实际应用: 如果你的宏执行需要很多文件, 那么就可以再一开始就先执行

打开每个文件, 如: Dim str As String str = ThisWorkbook.Path & "\日常数据模板.xls" Workbooks.Open str str = ThisWorkbook.Path & "\临时表.xls" Workbooks.Open str str = ThisWorkbook.Path & "\扰码分布表.xls" Workbooks.Open str

2、 Windows("***.xls").Activate Workbooks("***.xls").Close SaveChanges:=False 代码解释:关闭文件名为“***” ,属性为 xls 的文件等。 其中 SaveChanges:=False 意为不保存直接关闭该文件,如果 SaveChanges:=True,则表示 保存之后再关闭该文件。 实际应用:在执行完所有的代码之后关闭各个已打开的文件,对于需要保存数据的 SaveChanges:=True 即可,对于不需要保存数据的 SaveChanges:=False。 如: Windows("日常数据模板.xls").Activate Workbooks("日常数据模板.xls").Close SaveChanges:=False Windows("扰码分布表.xls").Activate Workbooks("扰码分布表.xls").Close SaveChanges:=True Windows("临时表.xls").Activate Workbooks("临时表.xls").Close SaveChanges:=False

3 / 25

VBA宏编程操作指南

3、 i = 1 While (Cells(i, 1) <> "") i=i+1 Wend Cells(i, 1).Select ActiveSheet.Paste 代码解释: 此段语句主要是对单元格进行判断, 是否为空白, 如果为空白, 则执行粘贴。 具体解释请看下图:

假如你要把 N 个不同 EXCEL 的内容粘贴到一个新的 EXCEL 里,也就是汇总所有的数据。 假如第一个 EXCEL 内容有 13 行,第二个 EXCEL 内容有 18 行,第三个 EXCEL 内容有 20 行,等等。 也许你会说直接定位到单元格不行吗? 当然,对于每天固定行数的 EXCEL,是可以的,但是如果每天的数据都在变,今天第一 个 EXCEL 有 17 行, 第二天又变为 10 行, 第二个 EXCEL 今天有 20 行, 第二天变为 25 行, 这样你就没法使用固定的单元格定位粘贴数据了。 因此就需要上面的代码。 语句类型为 While……Wend…… While (Cells(i, 1) <> "") Cells(i, 1)当 i=1,表示 A1 单元格,也就是当 A1 单元格不为空白 的时候,执行 i = i + 1,也就是接着判断 A2 是不是空白,依次类推…… 当执行到 Ai 为空白时(如上图则表示执行到 A14) ,执行 Cells(i, 1).Select ActiveSheet.Paste,也就是选中 A14 单元格,进行粘贴。这样通过判断空白的方法就不 会因为行数的变动而产生影响了。 注意:上面我们说的只是根据 Cells(i, 1)判断,同样,也可以根据 Cells(i, 2)第二列判断, Cells(i, 3)第三列判断等,这样就可以避免因为前面几列的空白列而导致后面列的判断出 现问题。

4 / 25

VBA宏编程操作指南

4、 i = 1 While (Cells(i, 1) <> "") i=i+1 Wend Cells(i, 1).Select Range(Selection, Selection.End(xlDown)).Select Selection.EntireRow.Delete 代码解释:此段语句主要是对单元格进行判断,是否为空白,如果为空白,则执行该单 元格以下所有数据的清除。具体解释请看下图:

此代码的和 3 部分的代码有相似之处,不同的

地方时当判断 Cells(i, 1)为空时,下一 步的执行不一样。 Range(Selection, Selection.End(xlDown)).Select Selection.EntireRow.Delete 此语句执行之后如下:

也就是当 Cells(i, 1)为空时(本图表示 A13 为空时) ,从 A13 开始清除 A13 往右以及 5 / 25

VBA宏编程操作指南

往下所有的数据。 此语句主要用途:修正自动填充导致的数据超出计划。 Range("A2").Select Selection.AutoFill Destination:=Range("A2:A10")

假如你有 A1-A12 小区 CI 需要关联小区扰码,当你在 B2 单元格通过 VLOOKUP 关联 数据时,你肯定需要让 B2 自动填充到 B12。但是如果你每天都需要关联数据,而每次 数据都会变化,即今天要关联 A1-A12,明天是 A1-A20,这样就需要自动填充到 A20, 但是 EXCEL 不是智能的,你第一次设定的自动填充到 A12,当然不会变了,这样就有可 能导致数据不全。 为了解决这个问题,你可以让 EXCEL 自动填充到第 1000 行,然后把多余的删掉就 可以了(也就是把 20 行以后自动填充的数据自动删除) 。 如图所示:从 B21 开始出现#N/A,这些数据没用的,使用 i=1 While (Cells(i, 1) <> "") i=i+1 Wend Cells(i, 1).Select Range(Selection, Selection.End(xlDown)).Select Selection.EntireRow.Delete 执行之后,B21 往下的#N/A 都会清空的。

6 / 25

VBA宏编程操作指南

5、Application.DisplayAlerts = False 代码解释:在宏的执行过程中出现的告警框不显示。 一般情况下,如果你执行宏,执行最后会出现如下截图,如果在代码的最前端加上 一句 Application.DisplayAlerts = False,那么就不会显示这些提示信息了。

例如上图表示你再录制的过程中需要进行分列,我们知道在执行分列之后,会弹出上面 的对话框要求选择,如果在代码的开始不增加 Application.DisplayAlerts = False,则在执 行的过程中会弹出对话框让我们选择,点击确定之后才会继续执行。

6、

MsgBox "清除成功!" Exit Sub Err1: MsgBox "清除失败!" 7 / 25

VBA宏编程操作指南

主要是 MsgBox 代码的应用,大家可以参考网上的一些资料,一般改代码都放在最 后,会出现如下的运行界面,主要用于提示信息。

7、 ActiveSheet.Range("$A$1:$AN$295").AutoFilter Field:=12, Criteria1:="10104" ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 Columns("N:N").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.ScrollRow = 126 ActiveWindow.ScrollRow = 501 ActiveWindow.ScrollRow = 1125 ActiveWindow.ScrollRow = 1625 ActiveWindow.ScrollRow = 2250 ActiveWindow.ScrollRow = 2375 ActiveWindow.ScrollRow = 2625 A

ctiveWindow.ScrollRow = 2750 ActiveWindow.ScrollRow = 2875 ActiveWindow.ScrollRow = 3000 ActiveWindow.ScrollRow = 3125 8 / 25

VBA宏编程操作指南

ActiveWindow.ScrollRow = 3249 ActiveWindow.ScrollRow = 3374 ActiveWindow.ScrollRow = 3499 ActiveWindow.ScrollRow = 3624 ActiveWindow.ScrollRow = 3749 ActiveWindow.ScrollRow = 3999 类似于 ActiveWindow.ScrollColumn,ActiveWindow.ScrollRow,等等都是一些无 用的代码,产生这些代码的原因就是因为我们拖拽鼠标,滑动鼠标的滑轮造成的, 这些代码就是需要我们删除的,删除之后并不影响代码的运行,也同时使我们的代 码变的精简美观。

第二部分: 1.2 第二部分:如何录制宏1、 如何录制宏。 首先打开 EXCEL2007,点到“开发工具”那一栏, (注意:有的人打开之后发 现没有开发工具那一栏, 原因可能是因为从没用过宏, 没有开启其功能, 需要在 “信 任中心”下的宏设置里面设置为“启用所有宏”即可)

2、 开始录制宏 9 / 25

VBA宏编程操作指南

点击录制宏,如下图所示,出现一个对话框,输入宏的名字,点击确定即可。

之后“录制宏”会变成“停止录用” ,表示已经在录制过程中,在这个过程中你所 进行有关 EXCEL 的操作都会被以代码的形式记录下来。

第三部分: 1.3 第三部分:实例解释如果编写宏在你创建一个宏命令之前,花几分钟来考虑你究竟想做什么。因为宏命令是一大堆 键盘输入的集合,事先计划你的行动非常重要。最早的计划宏命令的方法是手动地将宏 命令需要做的事情做一遍。在你做键盘输入的同时,在一张纸上记录下他们实际发生的 情况,不要漏掉任何东西。象录音机一样,Excel 可以将你的所有动作录制下来(事实 上并非如此,有些操作是无法录制的) 。如果在录制宏之前,你没有很好地计划,你会 录制很多不必要的步骤,而这些都会影响运行速度。尽管修改宏代码比去除录制宏里面 不必要的步骤容易, 但是, 仅仅录制必要的步骤会节省你修改代码的时间和以后的麻烦。 编写宏最简单的方法:复制粘贴删多余,补头补尾补关键。

实例一: 实例一:10 / 25

VBA宏编程操作指南

TD 扰码规划工具的编写,看起来不复杂。 最主要的就是要 经纬度转换距离 这个工具,当然这也是一个宏,我们不需要了解它, 只要知道它的功能是转换距离就行了。

我们需要把宏所有需要的 EXCEL 文件放在同一个文件夹里。 下面是我按照我的规划思路通过 EXCEL 宏录制出来最原始的代码: 第一步: 第一步:进行扰码分组 Sub 进行扰码分组() ' ' Macro1 Macro Columns("N:N").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("N2").Select ActiveCell.FormulaR1C1 = "=INT(RC[-1]/4+1)" Range("N2").Select Selection.AutoFill Destination:=Range("N2:N79") Range("N

2:N79").Select Columns("N:N").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Rows("1:1").Select Application.CutCopyMode = False Selection.AutoFilter ActiveWorkbook.Worksheets("原始表").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("原始表").AutoFilter.Sort.SortFields.Add Key:=Range _ ("N1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").AutoFilter.Sort .Header = xlYes .MatchCase = False 11 / 25

VBA宏编程操作指南

.Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Selection.AutoFilter End Sub 以上代码是我最开始录制的代码,我们需要对其进行修改。 其实修改代码很简单, 只要找对位置复制粘贴就可以了。 Application.DisplayAlerts 如 = False 代码,不管什么宏,只要把这句话加在代码的最前面就可以了。 红 色 标 注 的 Range("N2:N1000") , 注 意 看 是 从 Range("N2:N79") 改 为 Range("N2:N1000"),为什么要改为 1000 呢? 这是因为我们在录制宏的时候,采用的数据只有 79 行,而我们知道每次规划的原 始数据行数肯定会变化,有可能两百多行,为了防止数据不完全,我们就需要设置 一个范围,根据自己的理解去设置。 由上可知,我们设置为最大 1000 行,但是实际上的数据肯定是小于 1000 行的,这 样我们就需要把多余的行数删掉,就需要在代码后面加上下面这段代码,这样就能 够达到我们想要的效果了。 i=1 While (Cells(i, 1) <> "") i=i+1 Wend Cells(i, 1).Select Range(Selection, Selection.End(xlDown)).Select Selection.EntireRow.Delete

下面是修改之后的代码。 Sub 进行扰码分组() ' ' Macro1 Macro Application.DisplayAlerts = False Columns("N:N").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("N2").Select ActiveCell.FormulaR1C1 = "=INT(RC[-1]/4+1)" Range("N2").Select Selection.AutoFill Destination:=Range("N2:N1000") i=1 12 / 25

VBA宏编程操作指南

While (Cells(i, 1) <> "") i=i+1 Wend Cells(i, 1).Select Range(Selection, Selection.End(xlDown)).Select Selection.EntireRow.Delete Range("N2:N1000").Select Columns("N:N").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Rows("1:1").Select Application.CutCopyMode = False Selection.AutoFilter ActiveWorkbook.Worksheets("原始表").AutoFilter.Sort.SortFields.Clear ActiveWorkbook.Worksheets("原始表").AutoFilter.Sort.SortFields.Add Key:=Range _ ("N1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("原始表").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Selection.AutoFilter

End Sub 经过我们的稍微修改,复制粘贴几个关键代码,一个完整的宏代码就产生了,是不 是觉得很容易

呢?本来也不难的。

第二步: 第二步:经纬度转换距离 Sub 经纬度换算距离() ' ' Macro3 Macro ' Range("F2:G2").Select 13 / 25

VBA宏编程操作指南

Range(Selection, Selection.End(xlDown)).Select Selection.Copy Windows("经纬度算距离.xls").Activate Range("A2").Select ActiveSheet.Paste Windows("TD 扰码规划宏.xls").Activate Range("F1:G1").Select Application.CutCopyMode = False Selection.Copy Windows("经纬度算距离.xls").Activate Range("C2").Select ActiveSheet.Paste Range("C2").Select Application.CutCopyMode = False Selection.AutoFill Destination:=Range("C2:C79") Range("D2").Select Selection.AutoFill Destination:=Range("D2:D79") Range("E2").Select Selection.AutoFill Destination:=Range("E2:E79")

Columns("E:E").Select Selection.Copy Columns("G:G").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("G2").Select Range(Selection, Selection.End(xlDown)).Select Windows("TD 扰码规划宏.xls").Activate Columns("O:O").Select Application.CutCopyMode = False Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Windows("经纬度算距离.xls").Activate Columns("G:G").Select Selection.Copy Windows("TD 扰码规划宏.xls").Activate ActiveSheet.Paste Range("A1").Select Application.CutCopyMode = False ActiveWorkbook.Save End Sub 以上是刚开始录制的宏代码,同样需要修改。 14 / 25

VBA宏编程操作指南

按照一开始介绍的方法修改代码:补头,补尾,补关键。 Sub 经纬度换算距离() ' ' Macro3 Macro ' Application.DisplayAlerts = False Dim str As String str = ThisWorkbook.Path & "\经纬度算距离.xls" Workbooks.Open str (上面黄色的部分就是“补头” ) Windows("TD 扰码规划宏.xls").Activate Range("F2:G2").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Windows("经纬度算距离.xls").Activate Range("A2").Select ActiveSheet.Paste Windows("TD 扰码规划宏.xls").Activate Range("F1:G1").Select Application.CutCopyMode = False Selection.Copy Windows("经纬度算距离.xls").Activate Range("C2").Select ActiveSheet.Paste Range("C2").Select Application.CutCopyMode = False Selection.AutoFill Destination:=Range("C2:C1000") Range("C2:C142").Select Range("D2").Select Selection.AutoFill Destination:=Range("D2:D1000") Range("D2:D142").Select Range("E2").Select Selection.AutoFill Destination:=Range("E2:E1000") i=1 While (Cells(i, 1) <> "") i=i+1 Wend Cells(i, 1).Select Range(Selection, Selection.End(xlDown)).Select 15 / 25

VBA宏编程操作指南

Selection.EntireRow.Delete (上面黄色和红色的部分就是“补关键” ) Columns("E:E").Select Selection.Copy Columns("G:G").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("G2").Select Range(Selection, Selection.End(xlDown)).Select Windows("TD 扰码规划宏.xls").Activate Columns("O:O").Select Application.CutCopyMode = False Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Windows("经

纬度算距离.xls").Activate Columns("G:G").Select Selection.Copy Windows("TD 扰码规划宏.xls").Activate ActiveSheet.Paste Range("A1").Select Application.CutCopyMode = False ActiveWorkbook.Save Windows("经纬度算距离.xls").Activate Workbooks("经纬度算距离.xls").Close SaveChanges:=False (上面黄色的部分就是“补尾” ) End Sub 又是一个只要复制粘贴就可以补全代码的例子,找准位置,写起来很容易的。

下面再贴几个代码来更好的说明下: 日常数据制作宏是一个很典型的例子,能够很好的表现出来宏代码的初级应 用。 就拿日常数据制作宏(我只取其中 4 个 RNC 作为例子)来说:我们不需要看所 有的代码,只要找到关键部分,然后复制粘贴就可以了。 Sub Macro2() ' ' Macro2 Macro ' Dim str As String str = ThisWorkbook.Path & "\日常数据模板.xls" 16 / 25

VBA宏编程操作指南

Workbooks.Open str str = ThisWorkbook.Path & "\RNC1.xls" Workbooks.Open str str = ThisWorkbook.Path & "\RNC2.xls" Workbooks.Open str str = ThisWorkbook.Path & "\RNC3.xls" Workbooks.Open str str = ThisWorkbook.Path & "\RNC4.xls" Workbooks.Open str (上面标黄色的代码也就是我们一开始就列举的关键代码, 也就是我们宏 所需要的 EXCEL 文件,宏在执行之前需要先打开这些文件,因为在录制宏的时候这 些代码是不能被录制的,所以需要我们手动加上去。 ) '复制 RNC1 的小区参数信息 Windows("RNC1.xls").Activate Sheets("小区归属配置信息表").Select Range("B1", "B2").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Windows("日常数据模板.xls").Activate Sheets("小区参数信息").Select Range("A1").Select ActiveSheet.Paste Windows("RNC1.xls").Activate Sheets("小区归属配置信息表").Select Range("B5").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Windows("日常数据模板.xls").Activate Sheets("小区参数信息").Select i=1 While (Cells(i, 1) <> "") i=i+1 Wend Cells(i, 1).Select ActiveSheet.Paste (上面的黄色代码就是进行空格判断之后,然后再进行粘贴的,就是针对每天 都变化的数据而采用的代码。 ) '复制 RNC2 的小区参数信息 Windows("RNC2.xls").Activate Sheets("小区归属配置信息表").Select Range("B1", "B2").Select 17 / 25

VBA宏编程操作指南

Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Windows("日常数据模板.xls").Activate Sheets("小区参数信息").Select Range("A1").Select ActiveSheet.Paste Windows("RNC2.xls").Activate Sheets("小区归属配置信息表").Select Range("B5").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Windows("日常数据模板.xls").Activate Sheets("小区参数信息").Select i=1 While (Cells(i, 1) <> "") i=i+1 Wend Cells(i, 1).Select ActiveSheet.Paste

'复制 RNC3 的小区参数信息 Windows("RNC3.xls").

Activate Sheets("小区归属配置信息表").Select Range("B1", "B2").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Windows("日常数据模板.xls").Activate Sheets("小区参数信息").Select Range("A1").Select ActiveSheet.Paste Windows("RNC3.xls").Activate Sheets("小区归属配置信息表").Select Range("B5").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Windows("日常数据模板.xls").Activate Sheets("小区参数信息").Select i=1 While (Cells(i, 1) <> "") i=i+1 18 / 25

VBA宏编程操作指南

Wend Cells(i, 1).Select ActiveSheet.Paste

'复制 RNC4 的小区参数信息 Windows("RNC4.xls").Activate Sheets("小区归属配置信息表").Select Range("B1", "B2").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Windows("日常数据模板.xls").Activate Sheets("小区参数信息").Select Range("A1").Select ActiveSheet.Paste Windows("RNC4.xls").Activate Sheets("小区归属配置信息表").Select Range("B5").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Windows("日常数据模板.xls").Activate Sheets("小区参数信息").Select i=1 While (Cells(i, 1) <> "") i=i+1 Wend Cells(i, 1).Select ActiveSheet.Paste

Windows("RNC1.xls").Activate Workbooks("RNC1.xls").Close SaveChanges:=False 'Windows("RNC2.xls").Activate 'Workbooks("RNC2.xls").Close SaveChanges:=False 'Windows("RNC3.xls").Activate 'Workbooks("RNC3.xls").Close SaveChanges:=False Windows("RNC4.xls").Activate Workbooks("RNC4.xls").Close SaveChanges:=False (上面标黄色的代码就是我们刚开始说的关闭文件的代码,同样,宏录制 的时候也不能把关闭文件的操作录制下来,也需要我们手动添加。 )

19 / 25

VBA宏编程操作指南

MsgBox "汇总成功!" Exit Sub Err1: MsgBox "汇总失败!" (上面几行就是 MsgBox 函数, 前面已做介绍, 我们知道其基本用法就可以了) End Sub

第四部分:如何确定在哪个位置插入关键代码呢? 1.4 第四部分:如何确定在哪个位置插入关键代码呢?我们可以在调试的时候采用逐句运行语句,每运行一条语句就看一下实际的效果,找到 需要添加代码的位置,这样就可以根据自己的需要找到关键语句。

第五部分 部分: 1.5 第五部分:如何调试宏上面介绍的程序大多数都很短,所以找错误并不是非常困难。然而,当你编写更长 更复杂的过程时,查找错误源就更缓慢和费时了。幸运的是,VBA 编辑器提供了一套方 便的工具,让你追踪你 VBA 问题的过程更简单,更快捷,有更少的挫折。程序缺陷是 电脑程序中的错误,而调试则是定位和解决这些错误的过程。调试让你找到你的程序为 什么不按预期工作的原因。你可以通过步入程序代码或者检查变量值来达到目的。 使用下述指南进行你的 VBA 程序调

试: 如果你想要分析你的过程,通过按 F8 或者选择调试-逐语句,逐语句地执行你的代 码 如果你怀疑程序的某个地方有错误发生,那么可以使用断点 如果你想监测程序中某个变量或者表达式的值,那么可以添加一个监视表达式 如果你讨厌在冗长的程序代码中拉动滚动条到你感兴趣的部分去,那么你可以设置 一个书签,快速跳到需要的地方。

那么如何终止VB过程吗?如果你想到了按Esc键, 那么你对了。 如果你在运行程序, 并且突然按下Esc键,那么VB就会中断程序的运行,并显示如图13-1显示的信息。然而 除了Esc键,这个在很多情况下都很有力而且可靠的方法,VBA还提供了很多其它的方 法来中断你的过程,进入所谓的中断模式: 按Ctrl+Break 设置一个或多个断点 插入Stop语句 添加监视表达式 当你的程序执行被临时停止时,断点便发生了。VB会从过程的执行中记住所有变量和 语句的值,当用户从工具栏点击运行宏(或者“运行”菜单上的相同名称) ,或者点击 对话框(图13-1)上面的继续按钮,可以恢复。

20 / 25

VBA宏编程操作指南

下面通过图解来说明如何调试宏

如图所示,我们进入“开发工具” ,找到我们需要调试的宏名称,如“执行扰码分组” , 然后点击“单步执行” ,会进入到如下界面,黄色标注的代码就是下一步准备执行的代 码。 我们可以按“F8”来进行每一步的调试。

21 / 25

本文来源:https://www.bwwdw.com/article/mg7e.html

Top