按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
中,宏录制器用它自己的方式将事情搞定。为了将上面的指令变简单一些,你可以删除对单元格A1
的引用:
ActiveCell。Offset(…3; 0)。Select
ActiveCell。FormulaR1C1 = 〃text〃
ActiveCell。Offset(3; 0)。Select
使用相对引用来录制过程后,不要忘记再次点击这个按钮,如果下次录制一个非相对地址的过程。
29 选择单元格的其它方法
如果你经常需要访问你工作表里某些遥远的单元格,你可能已经对下面的键盘快捷键很熟悉:End+
上箭头, End+下箭头, End+左箭头和End+右箭头。在VBA中,你可以使用End属性快速地移动到遥
远的单元格。
VBA操作 立即窗口输入
选择任何行的最后一个单元格 ActiveCell。End(xlright)。Select
选择任何列的最后单元格 ActiveCell。End(xldown)。Select
选择任何行的第一个单元格 ActiveCell。End(xleft)。Select
选择任何列的第一个单元格 ActiveCell。End(xlup)。Select
注意,End属性要求一个自变量来表示你要移动的方向。使用下列Excel内置的常数来跳到具体的方
向:xlright; xlleft; xlup; xldown。
30 选择行和列
Excel使用EntireRow和EntireColumn属性来选择整行或整列。
64
… 页面 81…
VBA操作 立即窗口输入
选择当前活动单元格所在行的整行 Selection。EntireRow。Select
选择当前活动单元格所在列的整列 Selection。EntireColumn。Select
你选择了一个单元格区域,你也许想要知道选区包括多少行,多少列。我们来让Excel计算区域
A1:D15中的行数和列数:
1。 在立即窗口里输入下述VBA语句
Range(〃A1:D15〃)。Select
如果Excel窗口可见,当你按回车后,VBA会选中区域A1:D15
2。 输入下列语句来得到选区的行数
?Selection。Rowsunt
一旦你回车,VBA在下一行显示结果。你的选择包括15行
3。 输入下列语句来得到选区的列数
?Selectionlumnsunt
现在VBA告诉你,选中的区域A1:D15占据了四列的宽度。
4。 将光标放在关键字Rows或Columns中的任意位置,并且按下F1,获取这些有用属性的更多信息。
31 获取工作表信息
Excel工作表有多大?它有多少单元格,列和行?即使你忘记了这些细节,使用Count属性。
VBA操作 立即窗口输入
计算Excel工作表里总单元格数 ?Cellsunt
计算Excel工作表里总行数 ?Rowsunt
计算Excel工作表里总列数 ?Columnsunt
Excel 2002工作表里有16;777216个单元格,65;536行和256列。
32 往工作表输入数据
输入工作表里的信息可以是文本,数字或者公式。你可以使用Range对象的两种属性之一来往单元
格或单元格区域里输入数据:Value属性或者Formula属性。
Value属性:
ActiveSheet。Range(〃A1:C4〃)。Value = 〃=4 * 25〃
Formula属性:
ActiveSheet。Range(〃A1:C4〃)。Formula = 〃=4 * 25〃
上面两种例子,A1单元格都显示4乘25的结果100。
VBA操作 立即窗口输入
在单元格A5里输入文本“Amount Due” Range(〃A5〃)。Formula = 〃Amount Due〃
在单元格D21里输入数字“123” Range(〃D21〃)。Formula = 123
Range(〃D21〃)。Value = 123
在单元格B4里输入公式“=D21*3” Range(〃B4〃)。Formula = 〃=D21 * 3〃
33 返回工作表中的信息
毫无疑问,你在某些VB过程中可能需要返回单元格或者单元格区域的内容。虽然你既可以使用Value
属性也可以使用Formula属性,但是,这次,Range对象的这两个属性是不可互用的。
令?Range(〃A1〃)。Value将会返回值100
Excel将会显示公式“=4*25”而不是结果100
65
… 页面 82…
34 单元格格式
一个频繁的任务就是给选中的单元格或区域设置格式。你的VBA过程可能需要查明某个具体单元格
的格式。我们可以使用NumberFormat属性来找回单元格格式:
?Range(〃A1〃)。NumberFormat
在立即窗口输入上面的问题后,Excel显示“General”(译者:中文版本是“常规”,G/通用格式),
它表示所选的单元格没有设置任何特殊的格式。要用VBA改变单元格格式,输入下列指令:
Range(〃A1〃)。NumberFormat = 〃#;##0。00〃
如果你在单元格A1里输入125,当你使用上面的指令给它设置格式后,单元格A1将显示“125。00”。
你可以在Excel窗口的“设置单元格格式”对话框里查找必要的格式代码(“格式”-“单元格”)。
如果你要的格式没有列在“设置单元格格式”对话框里,那么请参考在线帮助,查找创建用户定义
的格式指导。
图2-26 你可以使用设置单元格格式对话框里的自定义给选择的单元格或单元格区域设置不同的
格式
35 移动,复制和删除单元格
在你做一个新的工作表模板时,你会发现经常要移动,复制和删除单元格内容。VB让你的工作表编
辑工作自动化变得可能,只要使用一些容易使用的方法就行:Cut;,Copy和 Clear。
VBA操作 立即窗口输入
移动单元格A5的内容到单元格A4里面 Range(〃A5〃)。Cut
Destination:=Range(〃A4〃)
复制单元格A3里的公式到区域D5:F5中 Range(〃A3〃)py
Destination:=Range(〃D5:F5〃)
清除单元格A4里的内容 Range(〃A4〃)。Clear
Range(〃A4〃)。Cut
注意,使用在Range对象上的Cut和Copy方法都需要一个叫“Destination”的特殊自变量。这个自
变量明确你要放置剪切或复制的数据的单元格或单元格区域地址。在最后一个例子中,使用了没有
Destination自变量的Cut方法来去除具体单元格的数据。Clear方法将删除具体单元格或单元格区
域的所有内容,包括格式和批注。如果你想要明确你要删除什么,使用下列方法:
66
… 页面 83…
36 操作工作簿和工作表
既然你已经涉足操作工作表单元格和单元格区域,是时候上一个台阶,学习如何控制单个工作簿,
已经整个工作簿集合了。如果你不知道如何打开一个新工作簿的话,你就不知道准备一个新的电子
表格了;如果你不知道如何关闭工作簿,你就不知道如何将工作簿从屏幕上消除。这些重要的任务
由两个VBA方法处理:Add和Close。下面的练习将给你必要的如何操作工作簿和工作表的语言技巧。
VBA操作 立即窗口输入
打开一个新工作簿 Workbooks。Add
获得第一个工作簿的名称 ?Workbooks(1)。Name
获得打开的工作簿数目 ?Workbooksunt
激活第二个打开的工作簿 Workbooks(2)。Activate
激活工作簿Chap02。xls Workbooks(〃Chap02。xls〃)。Activate
当前活动的工作簿存盘为NewChap。xls ActiveWorkbook。SaveAs Filename:=〃NewChap。xls〃
关闭第一个工作簿 Workbooks(1)。Close
关闭当前活动的工作簿,不保存变化 ActiveWorkbook。Close SaveChanges:=False
关闭所有打开的工作簿 Workbooks。Close
如果你运行了最后一个例子,那么现在你所有的工作簿都已经关闭了。在你要在工作表上使用前,
请确保先打开一个新工作簿。当你除了单个工作表时,你必须知道如何在工作簿里添加新的工作表,
知道如何选择一个或一组工作表,知道如何命名、复制、移动和删除工作表。在VB里,每个任务都
需要一个专门的方法或属性。
VBA操作 立即窗口输入
添加一个新工作表 Worksheets。Add
获得第一个工作表的名称 ?Worksheets(1)。Name
选择名为“Sheet3”的工作表 Worksheets(3)。Select
选择第一,第三和第四个工作表 Worksheets(Array(1;3;4))。Select
激活名为“Sheet1”的工作表 Worksheets(“Sheet1”)。Activate
将工作表“Sheet2”移动到工作表“Sheet1” Worksheets(〃Sheet2〃)。Move
之前 Before:=Worksheets(〃Sheet1〃)
重命名工作表“Sheet2”为“Expenses” Worksheets(〃Sheet2〃)。Name = 〃Expenses〃
获得当前工作簿里的工作表数目 ?Worksheetsunt
删除当前工作簿里的工作表“Expenses” Worksheets(〃Expenses〃)。Delete
注意Select方法和Activate方法之间的区别:
同时只能有一个工作表被激活。
技巧2-7:Sheets(译者简称为“表”)而不是Worksheets(译者简称为“工作表”)
除了工作表之外,工作簿集合里还包括图表。使用Add方法在工作簿里添加一个新图表:
Charts。Add
统计图表数目,使用:
?Chartsunt
在Excel 97之前的版本中,工作簿集合里包括两种额外的表:DialogSheets和Modules。Dialogs
已经被更亲切的用户窗体(UserForms)所取代了。从Excel 97开始,对话框和模块都被创建在VB
编辑器窗口里面了。
37 操作窗口(Windows)
当在好几个Excel工作簿上工作,并且需要比较或者巩固数据,或当你想要看同一个工作表里的不
67
… 页面 84…
同部分时,你很可能要用到Excel“窗口”菜单里的选项:新建窗口和重排窗口。我们来看看如何
通过VBA来安排窗口。
VBA操作 立即窗口输入
在新窗口里显示当前活动工作簿 ActiveWorkbook。NewWindow
在屏幕上显示所有打开了的工作簿 Windows。Arrange
激活第二个窗口 Windows(2)。Activate
获得当前窗口的名称 ?ActiveWindow。Caption
将当前窗口的名称改为“My Window” ActiveWindow。Caption = 〃My Window〃
当你在屏幕上显示窗口时,你可以决定如何排列它们。Arrange方法有许多自变量,让你如何放置
窗口的自变量称为ArrangeStyle(排列方式)。如果你忽略ArrangeStyle自变量,Excel将平铺所有
窗口。
常数 值 描述
xlArrangeStyleTiled 1 平铺窗口(默认模式)
xlArrangeStyleCascade 7 层叠窗口
xlArrangeStyleHorizontal 2 水平并排窗口
xlArrangeStyleVertical 3 垂直并排窗口
除了使用常数名称外,你也可以使用上面列出的等价值。要将所有窗口层叠起来,写下面的指令就
可:
Windows。Arrange ArrangeStyle:=xlArrangeStyleCascade
或者更简单点:
Windows。Arrange ArrangeStyle:=7
38 管理 Excel 应用程序
在本章的开始部分,你学习了对象是组织在一个叫对象模型的专门结构。在应用程序的对象模型的
最上面就是应用程序它本身。通过控制Application对象,你可以进行很多操作,例如将屏幕显示
效果保存为当日最后显示的效果,或者退出该应用程序。你知道,Excel允许你使用“文件”菜单
里的选项“保存工作区”来保存屏幕设定。在VBA里可以很容易地完成保存工作区的工作:
Application。SaveWorkspace 〃Project〃
上面的指令将屏幕设置保存在名叫“Project”的工作区里。下次你要在相同的文件和窗口排列时,
只要打开“Project”文件,Excel就会打开正确的文件和恢复你要的屏幕。
VBA操作 立即窗口输入
获取当前应用程序名称 ?Application。Name
将Excel应用程序标题改为“My Application” Application。Caption = 〃My Application〃
将Excel应用程序标题改回为“Microsoft Application。Caption = 〃Microsoft Excel〃
Excel”
获取你正在使用的操作系统 ?Application。OperatingSystem
获取该应用程序注册的人名或公司名 ?ApplicationanizationName
获取Excel。exe保存的文件夹路径 ?Application。Path
退出Excel Application。Quit
39 接下来……
在本章,你学习了很多基础的VBA术语和内置工具,可以用来使你的程序编写和调试更容易。你现
在应该对绝大多数Excel对象是如何组织和控制的有了一个比较好的了解。我努力使描述尽量少,
并且注重于教你如何使用你的新语言技巧立即控制Excel而不必先编写过程。正因为此,我注重于
立即窗口。VB过程通常包含多于一行的代码,事实上,它们可能变得很复杂。在你开始创建完整的
VBA过程之前,你仍然需要学习一些事情。例如,你如何保存目前Excel返回的信息,你的过程稍后
68
… 页面 85…
可以使用?在立即窗口里输入指令的时候,你学习了如何问Excel一些重要的信息,你得到了类似
“当前活动工作簿里有多少工作表?”或“单元格A4的内容是什么?”问题的答案。Excel不会在
乎你的问题有多么烦,只要你输入符合严格VBA语法的问题,Excel就会给你答案。当你开始编写你
自己的过程时,你会需要知道如何保存Excel的答案。在下章里,你将学习如何保存这种以后变量
需要用到的信息。你也将会展开数据类型和常数主题的学习。
第三章 了解变量,数据类型和常量
作者:Julitta Korol 翻译:Tiger Chen Dec 18’ 2004
就象现实生活中一样,编程中也是有些事情必须马上做,而其它的事情可以稍后进行。当你推迟一
件事情,你可以将它放入你心里的或纸上的“要做的事情”清单。清单上零零散散的事情,经常按
照它们类型或者重要性来分类。当你将任务交给别人或者最终你要开始做了,你需要将该任务从清
单里划掉。本章将演示你的VBA过程如何记住一些重要的信息,后面将用在你的语句或计算里。你
将学习过程如何保留不断地往变量输入“要做的事情”,如何声明变量,以及它们和数据类型及常
量有何关系。
1 保存 VBA 语句的结果
在第二章,你在立即窗口上输入一些VB指令,并且返回一些信息。例如,当你输入?Cellsunt,
你发现工作表里有16;777;216个单元格。然而,当你在立即窗口之外的地方写VB过程时,你不能使
用问号。当你忽略问号输入Cellsunt,