Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > 综合其它

【VBA系统教程十一】修改宏代码

时 间:2013-08-12 08:20:51
作 者:nivenm   ID:29828  城市:无锡
摘 要:宏,修改宏代码
正 文:

6修改宏代码
你必须知道你的宏代码放在哪里,你才能找到并修改它。回想你打开宏录制器的时候,你选择了“当前工作簿”作为存储地址。最容易找到宏的方法是打开宏对话框,如图1-4所示。
1. 选择“工具”-“宏”
2. 选择宏名(本例中为WhatsInACell)
3. 点击“编辑”按钮
Excel 打开一个专门的窗口,叫做Visual Basic Editor (VBE)如图1-5所示。利用快捷键Alt+F11可快速地在Excel表格界面和代码窗口切换。选择VBE菜单上的关闭选项可以关闭VBA代码窗口,返回到电子表格界面。
代码窗口暂时看上去有些令人迷惑,不必担心。只要你开始录制宏,以及尝试写一些代码,你终将这个屏幕所有的组件。现在,看一下代码窗口的菜单和工具栏。这两个工具栏和Excel 窗口的菜单完全不同。代码窗口的菜单和工具包含一些编程和测试代码所需要的工具。只要你彻底地学习本书的每一章,你就会成为使用这些工具的专家。
 
图1-5 VBE窗口是编辑宏命令和书写新的VBA代码的地方
VBE窗口的主要部分是多个窗口的集合界面,这些窗口在你创建和测试VBA过程的时候是及其有用的。图1-5显示了三个集合在一起的窗口:工程窗口,属性窗口和代码窗口。工程窗口显示一个开启的模块文件夹,在这里,模块1被选中了。Excel 录制你在工作表里的操作叫做模块1,模块2,等等。在本书接下来的章节里,你将利用模块来编写你自己的过程代码。模块类似于Word中的一个空白文档。储存每个单独模块的文件夹称为“模块”
技巧1-5:宏还是过程?
宏是通过内置宏录制器录制的,或者在VB编辑器里手动输入的一系列指令或函数。从Excel 5.0开始,“宏”经常被“过程”这个更广的概念所代替。尽管这两个词可以交替互换使用,但是,许多编程者更喜欢“过程”。虽然宏可以让你模仿键盘操作,真正的过程则还可以执行一些不能通过鼠标,键盘或者菜单来做的操作。换句话说,过程是一个更复杂的宏,它结合了传统编程语言的言语结构。
代码窗口(参见图1-5)显示了下列由宏录制器录制的代码:
Sub WhatsInACell()
'
' WhatsInACell Macro
' Macro recorded 5/31/2002 by Julitta Korol
' Indicates the contents of the underlying cells: text, numbers, formulas.
'
Selection.SpecialCells(xlCellTypeConstants, 2).Select
With Selection.Font
.Name = "Arial"
.FontStyle = "Bold"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 13
End With
Range("B6").Select
Selection.SpecialCells(xlCellTypeConstants, 1).Select
With Selection.Font
.Name = "Arial"
.FontStyle = "Regular"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 11
End With
Range("C6").Select
Selection.SpecialCells(xlCellTypeFormulas, 23).Select
With Selection.Font
.Name = "Arial"
.FontStyle = "Bold"     
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 3
End With
Range("A1:A3").Select
Selection.EntireRow.Insert
Range("A1").Select
With Selection.Interior
.ColorIndex = 13
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
Range("B1").Select
ActiveCell.FormulaR1C1 = "Text"    
Range("A2").Select
With Selection.Interior
.ColorIndex = 5
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
Range("B2").Select
ActiveCell.FormulaR1C1 = "Numbers"
Range("A3").Select
With Selection.Interior
.ColorIndex = 3    
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
Range("B3").Select     
ActiveCell.FormulaR1C1 = "Formulas"
Range("B4").Select
End Sub
           
从现在开始,让我们注重于寻找下面两个问题的答案:如何阅读宏代码?如何修改宏代码?
7添加注释
看一下录制的宏代码,请注意那些开头带单引号的行。这些行就是注释。注释默认显示为绿色。执行宏代码时,VB会忽略这些注释行。注释经常和宏代码放在一起,来整理那些意义不甚明显的语句。现在,我们来给宏WhatsInACell 添加注释。
1. 激活VBE窗口
2. 在Selection.SpecialCells(xlCellTypeConstants, 2).Select前面点击一下,将光标移至该语句开头,回车    
3. 将光标往上移一行到空白处,并且添加如下注释,注意前面有单引号(译者:英文状态下的单引号)
‘ Find and format cells containing text
4. 在Selection.SpecialCells(xlCellTypeConstants, 1).Select前面点击一下,将光标移至该语句开头,回车
5. 将光标往上移一行到空白处,并且添加如下注释,注意前面有单引号(译者:英文状态下的单引号)
‘ Find and format cells containing numbers
6. 在Selection.SpecialCells(xlCellTypeFormulas, 23).Select前面点击一下,将光标移至该语句开头,回车
7. 将光标往上移一行到空白处,并且添加如下注释,注意前面有单引号(译者:英文状态下的单引号)
‘ Find and format cells containing formulas
8. 在Range("A1:A3").Select前面点击一下,将光标移至该语句开头,回车
技巧1-6:关于注释
在VBE代码窗口里,以单引号开头的都是注释。注释的默认颜色是绿色。可以通过“选项”对话框(“工具”-“选项”-“编辑器格式”)更改注释颜色。注释也可以写在代码的后面。例如,在语句.ColorIndex = 11之后添加注释。点击该语句句末,按下Tab键,输入单引号,然后输入注释。显示如下:
 .ColorIndex = 11 ' Sets the font color to Violet
注释除了给用户提供代码目的信息之外,没有任何作用。请别忘记给你的代码写上注释。如果你几个月后还要回到你的代码,那么注释将帮你大忙。同样,注释可以使别人很快理解你的程序。
9. 将光标往上移一行到空白处,并且添加如下注释,注意前面有单引号(译者:英文状态下的单引号)
‘Create legend
8分析宏代码
所有宏过程都以关键词“Sub”开始,以关键词“End Sub”结束。在关键词“Sub”之后是宏的真正的名字,然后紧跟着是一对括号。在关键词Sub 和End Sub之间是那些你每次运行宏代码时VB执行的语句。VB从上到下读取语句,忽略那些句前带单引号的语句(参见上节关于注释的内容),读到End Sub时停止。请注意,录制的宏代码里包含许多停顿(译者:英文模式下的句号)。每行代码中都有停顿,用来连接VBA语言中不同的要素。如何阅读这种语言的用法呢?要从最后一个停顿的右边向左读。看看WhatsInACell里的一些语句:
 Range("A1:A3").Select
选择A1到A3单元格
Selection.EntireRow.Insert
往选中的区域中插入行。因为前面你选中的是三个单元格(译者:应该说是占据了三行的单元格),VB将插入三行。
 ActiveCell.FormulaR1C1 = "Text"
往当前单元格里输入“Text”。因为,之前的代码是Range("B1").Select,选择单元格B1,B1是当前激活的单元格,所有VB往B1单元格里面输入文本。
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
这是一段特别的代码块,解释如下:给当前选中的单元格设置单元格填充色为红色(ColorIndex = 3),设置填充模式为实心(xlSolid),并且给当前单元格明确为默认的填充模式(xlAutomatic)。这个代码块以关键词With开始,End With结束,它将加速宏代码的执行。宏代码知道走捷径,而不会每次都重复下面的说明:
Selection.Interior.ColorIndex = 3
Selection.Interior.Pattern = xlSolid
Selection.Interior.PatternColorIndex = xlAutomatic
在关键词With后面紧跟重复的Selection.Interior,再以End With结尾。


Access软件网官方交流QQ群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助