excel_vba_编程教程(完整版)-第22部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
。Top = 0
End With
End Sub
13。 选择“运行”-“运行宏”来测试这个过程
当你返回到放置该文本框的工作表时,该文本框已经移动到了工作表的左上方了。注意,
MoveTextBox程序在Shapes集合里选择了“Text box 1”。Text box 1是工作表里第一个对象的默认
名称。你每次增加新的对象后,Excel将给它安排新的好码(编号)。除了使用对象名称外,你还可
以引用集合成员的编号。例如,你可以输入:
With ActiveSheet。Shapes(1)
来代替:
With ActiveSheet。Shapes(〃Text box 1〃)
我们来用VB操纵另一个对象,你自己试试。在你放置文本框的工作表里再放置一个小圆圈。使用绘
图工具上的椭圆工具画这个圆圈。在Manipulations模块里插入一个新的过程,并且编写代码来放
置圆圈。记住,Excel连续地编号。第一个对象的编号为1,第二个则为2,等等,不管这个对象的
类型是文本框,椭圆或者是矩形,没有关系。
下面的过程MoveCircle演示如何将当前工作表里的椭圆移动到左上方去:
57
… 页面 74…
Sub MoveCircle()
With ActiveSheet。Shapes(2)
。Select
。Left = 0
。Top = 0
End With
End Sub
移动椭圆和移动文本框或者放在工作表里的其它对象类似。注意,过程中引用的是对象的编号,而
非它的名称椭圆 2。当你运行MoveCircle时,Excel移动的是椭圆,而不是文本框了。
20 使用 VBA 对象库
在前面的例子里,你学习使用了Excel对象库里的Shapes(图形)集合成员的属性。Excel库包含专
门使用Excel的对象,而VBA库则提供对许多内置VBA函数的访问,这些函数按类别分组。这些函数
是通用的,它们使你能够管理文件,设置日期和时间,与用户交流,转换数据类型,处理文本串或
者进行数学计算。在下面的练习中,你将学习如何使用内置的VBA函数来创建一个新文件夹,而不
需要离开Excel界面:
1。 回到模块Manipulations,那里有你的MoveTextBox和MoveCircle过程
2。 输入一个新的过程:
Sub NewFolder()
3。 点击回车键,VB会自动输入结束关键词End Sub
4。 按下F2激活对象浏览器
5。 在“工程/库”列表框里选择VBA
6。 在搜索文本框里输入file并且回车
7。 滚动成员列表框,并且选中MkDir方法(参见图2-21)
8。 点击对象浏览器上的“复制”按钮,将被选择的方法名称复制到剪贴板
图2-21 编写过程时,向对象浏览器寻求帮助来找内置的VBA函数
9。 返回Manipulations窗口,并且将复制的指令粘贴到NewFolder过程
10。 输入一个空格,接着是”C:Study”。确保你在引号里输入了整个路径名。NewFolder过程为:
Sub NewFolder()
MkDir 〃C:Study〃
58
… 页面 75…
End Sub
11。 运行过程NewFolder
当你运行NewFolder过程,VB在C盘上创建了一个新的文件夹。激活Windows浏览器可以查看该新文
件夹。创建一个新的文件夹后,你可能会发现你根本就不需要它,虽然你可以轻易地从Windows浏
览器里删除该文件夹,但是,如何从编程上去掉它呢?对象浏览器上列出了许多对文件夹和文件操
作很有帮助的其它方法。RmDir方法正如MkDir 方法一样使用简单。想要删除你硬盘上的“Study”
文件夹,只要将MkDir方法换成RmDir方法然后重新运行NewFolder过程就可以了。或者,你也可以
创建一个新的过程RemoveFolder,如下:
Sub RemoveFolder()
RmDir 〃C:Study〃
End Sub
RmDir方法允许你从硬盘上删除不需要的文件夹。
21 用对象浏览器来定位过程
除了定位对象,属性和方法外,对象浏览器还是个定位在不同工程里面的过程非常方便的工具。下
面的例子给你演示如何查看存在“Personal”工作簿里面的过程:
1。 激活对象浏览器并且选择工程/库下拉列表里的Personal。(译者:因为我没有Personal这个文
件。。。)
图2-22 对象浏览器列出所有在某个特定VBA工程里可用的过程
对象浏览器的左边显示所选工程里面对象名称,而右边则列出了所有可用的过程。
2。 双击NewFolder过程名称,VB将光标定位到该过程的第一行
3。 关闭对象浏览器
22 使用立即窗口
在你开始创建一个完善的VBA过程前(在下一章),先来做一些热身练习,增加你的VBA词汇。你怎
样才能学得快而且没有痛苦?你如何试验一下一些新学的VBA指令?这里有一些简短的,互动的语
言练习:输入一个简单的VBA指令,Excel会检查并且将结果显示在下一行。我们开始来设定你的练
习屏幕:
1。 在VB编辑器窗口,选择“视图”-“立即窗口”
在决定使用在你自己的VBA过程之前,立即窗口可以用来试验VB语言中不同的指令,函数和运算符。
这是一个非常好的调试新语言的工具,你输入在这个窗口里面的指令,将会立即显示结果。
立即窗口可以在VB编辑器窗口上任意移动,也可以设置为可连接的,这样它就会出现在相同的地方。
可以通过选项对话框上的“可连接的”页来打开或关闭可连接设置。在VB编辑器窗口上按下Ctrl+G
就可以快速访问立即窗口。立即窗口允许你输入VBA语句,并且测试它们的结果,而不需要写成一
个过程。立即窗口就像一个草稿板,你可以用它测试你的语句。如果该语句输出了你希望的结果,
你就可以将立即窗口上的语句复制到你的过程中去(或者,你也可以将语句拖曳到代码窗口,如果
代码窗口是可见的)
59
… 页面 76…
2。 将Excel和VB编辑器窗口并排排列
3。 在立即窗口里输入下述指令,并且回车
Worksheets(〃Sheet2〃)。Activate
当你按下回车键,VB开始工作,如果你上面输入的语句是正确的话,VBA激活当前工作簿里的第二
个工作表。工作簿底部的Sheet2这时应该是突出显示的。
4。 在立即窗口,输入其它VBA语句并回车
Range(〃A1:A4〃)。Select
你一旦按下回车,VB将选中当前工作表的A1,A2,A3和A4
5。 在立即窗口里输入下述指令:
'A1:A4'。Value = 55
当你按下回车,VB在A1:A4中的每个单元格里放置数字55。上面的语句是引用Range对象的一种所写
方式,完整的语法可读性更强:
Range(〃A1:A4〃)。Value = 55
图2-23 将Excel和VB窗口并排排列让你可以观察指令的运行
6。 在立即窗口输入下述指令:
Selection。ClearContents
回车后,VBA清除所选单元格区域的内容,区域A1:A4现在是空的
7。 在立即窗口输入下述指令:
ActiveCell。Select
回车后,VB激活A1单元格
图2-24 在立即窗口里输入指令,一旦你按下回车键,指令就会被执行
60
… 页面 77…
图2-24显示了上面练习中在立即窗口里输入的所有指令。你每次按下回车键后,Excel总是执行光
标所在行的语句。如果你想要再次执行同一指令,那么点击该指令行的任意位置,回车。为了更多
的练习,重新运行图2-24里语句,从立即窗口的第二行指令开始,点击合适的地方并回车,一个
一个地执行这些指令。
23 获取立即窗口里的信息
到目前为止,你已经使用立即窗口执行操作了,这些操作也可以是手动地在工作表的任意区域点击
鼠标并且输入数据。立即窗口也允许你问问题。假设你想要找到下面问题的答案:“现在选中的是
哪些单元格?”,“当前单元格里的值是多少?”,“当前工作表的名称是什么?”,“当前窗口的编号
是多少?”使用立即窗口,你可以轻易地找到这些问题,以及其它问题的答案。在前面的例子里,
你输入了好几个指令,让我们返回立即窗口去问几个问题。Excel甚至在你关闭了立即窗口后还能
记住你在立即窗口里输入的指令。当你退出Excel时,立即窗口的内容自动会被删除。
1。 鼠标点击立即窗口第二行你输入Range(〃A1:A4〃)。Select的任意地方
2。 回车,让Excel再次选择单元格A1:A4
3。 在立即窗口新的一行输入下面的问题:
?Selection。Address
当你按回车,Excel不会选择工作表的任何东西,取而代之,立即窗口上会在另外一行显示该指令
的结果。在该例中,Excel返回的是当前被选择的单元格的绝对地址(A1:A4)。问号(?)告诉
Excel在立即窗口显示指令的结果。除了问号,你还可以使用Print关键字。让我们使用关键字Print
问工作表名称
4。 在立即窗口新的一行,输入下述问题:
Print ActiveWorkbook。Name
回车后,Excel在立即窗口新的一行输入了当前工作簿的名称。
找找应用程序的名称如何?Chap02。xls的父对象是谁?
5。 在立即窗口新的一行,输入下述问题:
?Application。Name
Excel会显示它自己的全名:Microsoft Excel
立即窗口也可以用来做一个快速计算
6。 在立即窗口新的一行,输入下述问题:
?12/3
回车后,Excel会在下一行显示该除法运算的结果。但是,万一你想立即知道3+2和12*8的结果呢?
你可以将它们输入在一行,而不必分成两行,例如:
?3+2:?12*8
注意,冒号将两个代码块分割开来。
当你按下回车键,Excel分别在立即窗口的两行显示结果5,96。
下面是你在立即窗口里输入的所有指令,以及Excel对你问题的回答:
Worksheets(〃Sheet2〃)。Activate
Range(〃A1:A4〃)。Select
'A1:A4'。Value = 55
Selection。ClearContents
ActiveCell。Select
?Selection。Address
A1:A4
Print ActiveWorkbook。Name
Chap02。xls
?Application。Name
Microsoft Excel
?12/3
4
?3+2:?12*8
61
… 页面 78…
5
96
要清除立即窗口里的指令,只要选中所有指令并且按下Delete键
24 学习对象
要在Excel里创建一些自定义应用程序,需要一些常用对象或者对象集合的工作知识,例如Range,
Workbook (Workbooks),Worksheet (Worksheets),Window (Windows)和 Application。在前面部
分,你开拓了学习VB的许多方法。这里有一个总结关于什么时候使用什么工具:
象浏览器
本章剩余的几页里有一些VBA语言训练,可以帮助你更好地理解VBA语法。如果你花些时间在立即窗
口过一遍这些语法训练,你将理解绝大部分。
图2-25 Excel对象模型里的Range对象
25 电子表格单元格操作
当你已经准备好编写你自己的VBA过程,将电子表格任务自动化的时候,你很可能是从寻求操作电
子表格单元格的指令开始的。你需要知道如何选择单元格,如果在单元格输入数据,如何给单元格
区域命名,如何设置单元格格式,以及如何移动,复制和删除单元格。虽然这些任务可以通过鼠标
或键盘轻易执行,掌握VBA这些