excel_vba_编程教程(完整版)-第21章
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
40
… 页面 57…
图2-2 工程浏览器窗口显示通过属性窗口给工程和模块设置的独特名称
4 从其它工程调用过程
你只要明确过程名称,就可以调用这个在同一个工程里任何模块里的过程。假设过程FormulasOnOff
和宏WhatsInACell在同一个工程里的不同模块(或者同一个模块),在WhatsInACell宏里面调用过
程FormulasOnOff,你所要做的所有工作只是明确过程名称,示例如下:
Sub WhatsInACell()
FormulasOnOff
End Sub
然而,如果两个或者两个以上的模块含有这个相同的过程名称,你除了要明确过程名称外,还必须
包括模块名称。假设工程FirstSteps (Chap01。xls)有三个模块。模块FormulaFormatting包含宏
WhatsInACell,但是,模块Switches和模块Formulas都含有一个叫FormulasOnOff的宏。如何在
WhatsInACell调用FormulasOnOff(模块Switches里面的)?请看下面例子:
Sub WhatsInACell()
Switches。FormulasOnOff
End Sub
要调用其它工程里的过程,你必须建立对该工程的引用。你可以在“引用”对话框进行这些操作。
因为FormulasOnOff在Personal (Personal。xls)工程里,在你能够从WhatsInACell调用它之前,你
需要添加对“Personal”的引用。下面是几种建立引用的方法:
1。 在工程浏览器窗口,点击FirstSteps (Chap01。xls)
2。 选择“工具”-“引用”
3。 在引用对话框,选中“Personal”旁边的勾选框(参见图2-3),然后点击确定(译者:在截图
前,我并没有保存Personal,所以在附图里没有Personal一行,如果你依照书中一步一步走下
来,应该没有问题)
41
… 页面 58…
图2-3 引用对话框列出了所有这个工程可以引用的工程。如果你想要执行其它工程里的过程,你
就必须建立对这个工程的引用
既然对“Personal”工程的引用已经建立了,我们就来从WhatsInACell里调用FormulasOnOff吧。
1。 在工程浏览器窗口,选择FirstSteps (Chap01。xls)并且定位到含有WhatsInACell的模块
2。 在MsgBox 〃所有操作都已完成〃之前增加一空白行,并且输入代码:FormulasOnOff
3。 返回到Excel界面,确保当前工作表是这个例子数据(参见第一章的图1-1)
4。 使用任何你在第一章里学到的方法来运行宏WhatsInACell
如果你给两个不同工程里的不同过程以相同的名称,那么你必须明确工程名称才能调用它。
我们假设FirstSteps (Chap01。xls)工程和Personal (Personal。xls) 工程里都有叫FormulasOnOff
的宏,要调用Personal (Personal。xls)工程里的FormulasOnOff(记住,你已经必须先建立对
Personal的引用),必须包括工程名称:
Sub WhatsInACell ( )
Personal。Switches。FormulasOnOff
End Sub
技巧2-2 VB如何定位被调用的过程
当你调用一个过程,VB先在主调方(WhatsInACell)的同一个模块里查找。如果没有找到被调过程
(FormulasOnOff),VB就会在同一个工程的其它模块里查找。如果还是找不到,VB则会检查对其它
工程的引用。
技巧2-3 工程名称不在引用对话框
如果你想要调用一个当前关闭的工程里的过程,当你打开引用对话框试图建立引用时,这个过程名
称不在清单中。点击“浏览”,并且打开被调用过程所在的文件夹。添加引用的对话框默认地列出
数据库文件(*。olb; 。tlb; 。dll)。从文件类型的下拉清单中选择Excel文件(*。xls; *。xla),选
择并打开含有你要调用过程的文件。这个工程的名称将会加在引用对话框的最后一行。
5 了解对象,属性和方法
使用VBA,你可以创建工程控制Excel的许多东西,你同样也可以控制很多其它的应用程序。VB的伟
大来自于它的控制和管理各种各样的对象的能力。但是,“对象”是什么呢?“对象”是你通过VBA
控制的东西。工作簿,工作表,工作表里的单元格区域,图表或者工具条,这些只是一些用Excel
时想要控制的东西的举例。这些东西就是对象。Excel含有超出一百种你可以通过不同方式操作的
对象。所有的VB对象都被分层归类。一些对象本身又可能含有其它的对象,例如,Excel时一个应
用对象,这个应用对象包含其它对象,例如工作簿或者命令条。工作簿对象可能包含其它对象,如
42
… 页面 59…
工作表或者图表。你将在本章种学习如何控制以下Excel对象:区域,窗口,工作表,工作簿和应
用。我将“区域”列在了第一位置,有一个非常重要的原因,如果你不知道如何操作单元格区域的
话,你基本上不能用电子表格来做什么。
某些对象看上去相似。如果你打开一个新工作簿,检查它的工作表,你不会发现什么不同。一组相
似的对象被称为“集合”。例如,工作表的集合包含所有具体工作簿中的工作表;命令条的集合包
含所有的工具条和菜单。集合同样是对象。Excel中使用得最频繁的集合是表(Sheets)集合,它
代表所有的工作表和图表,还有工作簿集合,工作表集合以及窗口集合。当你使用集合时,相同的
动作可以在这个集合中所有的对象上执行。
每一种对象都有一些特征供你描述。在VB里,这些对象的特征被称为“属性”。例如,工作簿对象
有名称属性;区域对象有列,字体,公式,名称,行,样式和值等属性。这些对象属性是可以设置
的。你通过设置对象的属性控制对象的外观和位置。对象属性一次只能设置为一个特定的值。例如,
当前工作簿不可能同时有两个不同的名称。VB中最难理解的部分是有些属性同时又可以是对象。想
想区域(Range)对象,你可以通过设置字体颜色来改变选定单元格的外观。但是,字体(Font)
可以有不同的名称(Times New Roman; Arial; …),不同的字号(10,12,14,…)和不同的样
式(粗体,斜体,下划线,…)。这些是字体的属性。如果字体有属性,那么字体也是对象。
属性真是了不起,让你改变对象的外观,但是,如何控制这些操作呢?你在使Excel为你执行任务
之前,你需要知道另外一个术语。对象有方法。每一种你想要对象做的操作都被称为“方法”。最
重要的VB方法是Add方法。你可以使用这个方法添加一个新工作簿或者工作表。对象可以使用不同
的方法。例如,区域(Range)对象有专门的方法让你清除单元格内容 (ClearContents方法), 清
除格式(ClearFormats方法)以及同时清除内容和格式(Clear方法)。还有让你选择,复制或移动
对象的方法。方法有可选择的参数确定方法执行的具体方式。例如,工作簿(Workbook)对象有一
个叫关闭(Close)的方法。你可以使用它关闭任何打开了的工作簿。如果工作簿有改动,Excel
会弹出一个信息,问你是否要保存变化。你可以使用关闭方法和设定它的保存变化(SaveChanges)
参数为假(False)来关闭这个工作簿并且不管它的任何变化。正如例子:
Workbooks(〃Chap01。XLS〃)。Close SaveChanges:=False
6 学习对象,属性和方法
当你学习新的事物时,理论会给你必须的背景,但是,你如何真正知道那是什么呢?大多数人习惯
形象思维,为了使Excel对象易于理解,VB在线帮助提供了一个对象模型,请看接下来的附图。注
意,Application对象位于树型图的最上端,它实际上代表Excel本身。其它对象在较低的层次。
假设你想要控制Range对象,在你能够控制任何Excel对象之前,你必须对它创建引用。为了获得下
图中的Range对象,只要遵照下面几行代码。每次看到树型图中的线指向不同的层时,你只要巧妙
地将线换成一个逗点运算符(停顿,英文状态下的句号)。这样,最终你会以下面的方式到达Range
对象:
Application。Workbook。Worksheet。Range
你可以使用Excel对象树型图来寻找到其它对象的路径,例如窗口(Window),批注(ment),自
动筛选(AutoFilter)或者绘图区(ChartArea)。分析对象模型是一个学习Excel对象的非常好的
方法。你花在这里的时间,以后你开始编写VBA过程的时候,会给你加倍的回报。通常,你需要明
确你引用的对象的名称。
现在,我们来点更具体的。假设你要清除单元格A4里的内容。手动做这个时,只要选择单元格A4
然后按下键盘上的Delete键就可以了。用VB做同样的操作,你首先需要知道如何使Excel选中了正
确的单元格。单元格A4和其它的工作表单元格一样,是Range对象。VB没有Delete方法来清除单元
格内容,取而代之的是ClearContents方法,例如:
Range(〃A4〃)。ClearContents
注意在对象名称和方法之间的逗点运算符。这个指令去除单元格A4里的内容。然而,如何使Excel
清除工作簿Chap02。xls第一个工作表里单元格A4的内容呢?我们仍然假设打开了好几个工作簿。
43
… 页面 60…
图2-4 Excel对象树型图(第一页)(译者:原书图2-5(工作簿对象树型图)已包含在内,故在
此略过)
如果你不希望最后在错误的工作簿或工作表里删除了A4里的内容,那么你必须写下详细的指令,这
样VB就知道在哪里找这个单元格:
Application。Workbooks(〃Chap02。xls〃)。Worksheets(〃Sheet1〃) 。Range(〃A4〃)。ClearContents
上面的指令应该写成一行,并且应该从右到左阅读:清除单元格A4里的内容,这个单元格在一个叫
“Sheet1”的工作表里,而这个工作表又在一个叫“Chap02。xls”的工作簿里面,工作簿“Chap02。xls”
又应该是Excel应用程序的一部分。注意,集合名称的后面带有一个字母“s”:Workbooks和
Worksheets。所有引用的工作簿,工作表或单元格名称都必须用引号(译者:英文状态的引号)包
括起来。
如何找到Excel对象树型图?选择Excel界面上的“帮助”- “Excel帮助”-“编程信息”-“微
软Excel VB参考”-“Excel对象模型”。(译者:2002版有全局的对象模型,2003版好像没有这个。)