所有宏过程都以关键词“Sub”开始,以关键词“End Sub”结束。在关键词“Sub”之后是宏的真正的名字,然后紧跟着是一对括号。在关键词Sub 和End Sub之间是那些你每次运行宏代码时VB执行的语句。VB从上到下读取语句,忽略那些句前带单引号的语句(参见上节关于注释的内容),读到EndSub时停止。请注意,录制的宏代码里包含许多停顿(译者:英文模式下的句号)。每行代码中都有停顿,用来连接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开始,EndWith结束,它将加速宏代码的执行。宏代码知道走捷径,而不会每次都重复下面的说明:
Selection.Interior.ColorIndex = 3
Selection.Interior.Pattern = xlSolid
Selection.Interior.PatternColorIndex = xlAutomatic
在关键词With后面紧跟重复的Selection.Interior,再以End With结尾。
你已经逐行解析了你宏代码,你会发现Excel录制了许多你并不想要包含进去的信息。例如,在选中了文本单元格后,除了设置字体为粗体和颜色为紫色之外,Excel 还录制了其它在字体页的选项——字体名称,字体大小,删除线,上标,下标,阴影和下划线。请看下列代码片断:
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
如果你使用了对话框,Excel总会录制所有的设定。这些多余的代码使得你的宏代码冗长而难以理解。因此,你完成录制宏后,最好检查一遍你录制的代码并删除不必要的行。
1、在下面的代码中,删除带删除线的行:
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
清除后,在关键词With和End With之间只剩下了两句代码,这些才是你在录制宏的时候真正做的设置:
With Selection.Font
.FontStyle = "Bold"
.ColorIndex = 13
End With
2、找到设置数字单元格格式的代码,依照下面的例子修改代码:
" Find and format cells containing numbers
With Selection
.SpecialCells(xlCellTypeConstants, 1).Select
.Font.ColorIndex = 11 " Sets the font color to Violet
End With
Range("C6").Select
3、找到设置公式单元格格式的代码,依照下面的例子修改代码:
" Find and format cells containing formulas
Selection.SpecialCells(xlCellTypeFormulas, 23).Select
With Selection.Font
.FontStyle = "Bold"
.ColorIndex = 3
End With
4、找到下述两行代码:
Range("A1:A3").Select
Selection.EntireRow.Insert
5、用下面的一句代码取代上面的两句代码:
Range("A1:A3").EntireRow.Insert
注意,Excel使用了R1C1形式来设置选中单元格个公式:
ActiveCell.FormulaR1C1 = "Text"
ActiveCell.FormulaR1C1 = "Numbers"
ActiveCell.FormulaR1C1 = "Formulas"
宏录制器使用了一次“ActiveCell”和一次“Selection”来选择当前单元格。这两个词都称为属性。你将在第二章里学习属性。当仅有一个单元格被选中时,你可以随意使用“ActiveCell”或者“Selection”。
当你修改宏的时候,很可能会带入一些错误。例如,你可能会删除一行重要的代码,或者可能不注意清除或忽略了一个逗点(停顿)。为了确保你的宏在你修改之后还能正确地工作,你必须运行它。在VBE窗口,将光标放在宏代码WhatsInACell的任意行,选择“运行”-“运行模块/窗体”
如果你在修改代码的时候,没有带入任何问题,那么宏将顺利运行,而不会有任何报错。你需要切换到Excel界面取看你的宏运行的结果。你可以点击任务栏,或者按Alt+F11回到Excel界面。
如果宏在运行的过程中遇到错误,你将会看到一个对话框显示发现的错误类型。在你运行宏命令之前,你必须确保你的宏可以在当前激活的工作表里面运行。例如,你当前电脑上激活的时一个空的Excel工作表,你试图运行WhatsInACell,这时你将看到一个错误信息:“运行时间错误‘1004’-找不到单元格”。点击“结束”按钮,在你重新运行宏之前,确保选择了正确的工作表。
如果选择的工作表只含有文本,你在运行WhatsInACell的时候,VB试图选择含有数字的单元格时会遇到同样的“找不到单元格”的错误。
如果你忽略了WithSelection.Font中的逗点,VB会出现“运行时间错误‘424’-需要对象”的信息。点击信息框上的“调试”按钮,你将进到代码窗口。同时,VB会进入“中断”模式,并且将有问题的行用黄色突出出来。在你更正代码后,VB可能会弹出信息:“这个操作将会重置你的工程,继续?”点击确定。尽管你可以在中断模式修改代码,但是,有些修改会终止宏的继续执行。更正宏代码后,重新运行它,也许你会需要解决更多的错误,之后才能顺利地运行它。
ASP.NET Button ValidationGroup 属性 Button 控件定义和用法 ValidationGroup 属性规定在 Button 控件回发到服务器时要进行验证...
WebSecurity - GeneratePasswordResetToken()WebSecurity 对象定义 GeneratePasswordResetToken() 方法生成一个密码重置令牌,可...
ASP.NET Panel DefaultButton 属性 Panel 控件定义和用法 DefaultButton 属性用于设置或返回 Panel 控件的默认按钮的 ID。 使用 ...
ASP.NET ListBox 控件 Web 服务器控件定义和用法 ListBox 控件用于创建但选货多选的下拉列表。 ListBox 控件中的每个可选项目是...
ASP.NET TableCell VerticalAlign 属性 TableCell 控件定义和用法 VerticalAlign 属性用于设置或返回 TableCell 控件中内容的垂...