如果你想要在VBA众多的组件和功能中自由切换,那么可以使用对象浏览器。这个专门的内置工具在VB编辑器窗口是可用的。使用下面任何一种方法都可以访问对象浏览器:
图2-16 对象浏览器让你在当前VBA工程里可用的所有对象,属性和方法里浏览
1、按F2
2、选择“视图”-“对象浏览器”
3、点击工具条上的“对象浏览器”按钮
对象浏览器让你浏览VBA过程中可用的对象,也可以查看它们的属性,方法和事件。在对象浏览器的帮助下,你可以在VBA工程的多个过程之间快速移动。
对象浏览器分为三部分(参见图2-16)。窗口的上部显示“工程/库”下拉列表,这里列出了所有库名称以及当前VBA工程里可用的所有工程名称。库是包含一个应用程序里对象的信息的专门文件。新的库可以通过“引用”对话框(“工具”-“引用”)来添加。<所有库>列出了你电脑上安装了的所有库中的所有对象。当你选择一个叫“Excel”的库时,仅仅能在Excel里执行的对象名称才能被看到。和Excel库相反,VBA库列出了所有能在VBA里执行的对象名称。
在“工程/库”下拉列表框下面,有一个“搜索”文本框,让你可以快速地在某个库里搜索你的信息。这个地方会记住你最近搜索的四个项目。在对象浏览器的任何地方单击右键,在快捷菜单上选择“全字匹配”,你就可以只搜索匹配整个字的内容。对象浏览器上的“搜索结果”(参见图2-16和2-17)显示符合搜索条件的库,类和成员。当你输入搜索文本并且单击搜索按钮,VB展开对象浏览器对话框以显示搜索结果。你可以点击“望远镜”按钮右边的“显示/隐藏搜索结果”来显示或者隐藏搜索结果。
图2-17 在对象浏览器里搜索答案
类列表框显示所选中的库里面所有可用的对象类,如果你选择VBA工程,列表显示该工程里的对象。在图2-16里,CommandBarComboBox 对象类被选中了。当你选中一个类,右边的列表(成员)显示该类可用的属性,方法和事件。图2-16上显示了类CommandBarComboBox的一些成员。成员默认地按字母顺序列出。然而,你可以使用对象浏览器快捷菜单上的“组成员”来组织这些成员列表(属性,方法或事件)。如果你选择“工程/库”里面的VBA工程,成员列表框列出该工程里的所有过程。
双击该过程名称,就可以进入该过程并检查其代码。如果你选择类“VBA”,你将看到VB内置的函数和常数。如果你对所选的类或成员需要更多的信息,可以点击对象浏览器窗口上面的问号按钮。对象浏览器下面的窗口显示所选成员的代码格式。如果你点击代码格式里绿色的连接部分,你将跳到对象浏览器窗口的所选成员的类或库。代码格式里的代码可以被复制到Windows剪切板并且粘贴到代码窗口里去。如果对象浏览器和代码窗口都是可见的,你只要选中代码格式里的文本,直接拖曳到代码窗口就行了。
通过对象浏览器窗口上的横竖分割线,你可以轻易地改变各个窗口的大小。你已经发现了对象浏览器,你也许在想你如何才能让它帮助你进行VBA编程。假设你在工作表中央放置了一个文本框,你如何让Excel将这个文本框移动到工作表的左上方?
1.打开一个新工作表
2.选择“视图”-“工具栏”,然后点击“绘图”
3. 点击“绘图”上的文本框,在工作表中央画一个文本框,并且随便输入什么文字
4. 选择文本框之外的任意单元格
5. 按下Alt+F11激活VB编辑器窗口,并且选择工程浏览器窗口的Personal (Personal.xls)
6. 选择“插入”-“模块”,增加一个新的模块
7.在属性窗口,给该模块重命名:Manipulations
8.选择“视图”-“对象浏览器”,或按F2
9. 在“工程/库”下拉列表框里选择“Excel”类
10. 在搜索框里输入“textbox”并点击搜索按钮。确保你没有在文字间敲入空格。
图2-18 Excel 在工作表上面的名称框里显示插入的对象名称
图2-19 使用对象浏览器窗口,你可以找到合适的VBA指令来编写你自己的过程
显示的结果表明对象Shapes掌管我们文本框操作(参见图2-19)。从成员列表清单上看,你可以很快就知道AddTextbox方法就是用来在工作表里添加文本框的方法。代码格式窗口显示了使用该方法的正确语法。如果你选择AddTextbox方法并且按F1,你将看到关于它的帮助窗口,有更详细的关于如果使用该方法的信息(参见图2-20)
图2-20 要获取对象浏览器找到的任何项目详细信息,只要选择整个项目并且按F1就可以了
当你细看AddTextbox方法的自变量和它们在帮助窗口上的解释时,你就可以很快地知道文本框在工作表中的位置是由Left和Top属性来决定的。你需要做的只是返回代码窗口,编写指令来移动文本框到工作表的左上方。
11. 关闭对象浏览器和帮助窗口(如果它们还是打开的)
12. 双击Manipulations模块,输入过程MoveTextBox:
Sub MoveTextBox()
With ActiveSheet.Shapes("Textbox 1") ‘Text box 1在中文版本里为“文本框1”
.Select
.Left = 0
.Top = 0
End With
End Sub
当你返回到放置该文本框的工作表时,该文本框已经移动到了工作表的左上方了。注意,MoveTextBox程序在Shapes集合里选择了“Text box 1”。Text box 1是工作表里第一个对象的默认名称。你每次增加新的对象后,Excel将给它安排新的好码(编号)。除了使用对象名称外,你还可以引用集合成员的编号。例如,你可以输入:
With ActiveSheet.Shapes(1)
来代替:
With ActiveSheet.Shapes("Textbox 1")
我们来用VB操纵另一个对象,你自己试试。在你放置文本框的工作表里再放置一个小圆圈。使用绘图工具上的椭圆工具画这个圆圈。在Manipulations模块里插入一个新的过程,并且编写代码来放置圆圈。记住,Excel连续地编号。第一个对象的编号为1,第二个则为2,等等,不管这个对象的类型是文本框,椭圆或者是矩形,没有关系。下面的过程MoveCircle演示如何将当前工作表里的椭圆移动到左上方去:
Sub MoveCircle()
With ActiveSheet.Shapes(2)
.Select
.Left = 0
.Top = 0
End With
End Sub
移动椭圆和移动文本框或者放在工作表里的其它对象类似。注意,过程中引用的是对象的编号,而非它的名称椭圆 2。当你运行MoveCircle时,Excel移动的是椭圆,而不是文本框了。