Excel的操作基本都是围绕工作簿、表单、单元格展开的,这些就是Excel操作的核心对象,所以VBA操作的核心对象也是它们。了解了这些核心的对象与它们支持的功能,我们就可以很方便的开发各种应用。 了解了这一点,我们先来分析一下Excel核心对象与我们看到的Excel文件的对应关系:
从这个描述中,我们可以很容易的看出每个对象的层级关系和包含关系:
这个纵向的关系就如下图所示: ![]() 静态的分析完这些以后,下面我们动态的分析一个常见的操作:打开一个Excel文件,Excel会自动做哪些事呢?当我们打开多个Excel文档后,这些对象有什么变化呢? 打开第一个Excel文档的时候,Excel会实例化一个Application对象代表Excel应用,然后实例化一个Workbook代表当前的工作簿,然后实例化相应的Worksheet和更底层的其他对象。当再次打开别的文档的时候,由于Application对象已经存在了,所以,只会实例化新的Workbook,Worksheet等对象,而不同的Workbook对象之间并不会互相干涉。当我们操作Excel中的各种对象的时候,基本都是选中并激活对象,然后通过鼠标或键盘完成各种功能。这个过程是简单的,但是很直观,很有用,其实自动化这些操作的过程,就是我们使用VBA脚本模拟这个过程的过程。 从上面的分析我们已经得到了核心对象的关系,在下面我总结了这些核心对象最常用的一些属性和方法。 1. Application Application代表的是Excel应用程序,从核心的操作对象包含关系分析得到下列成员: Workbooks - 类别:集合/属性,返回类型:Workbook集合,含义:当前打开的所有Excel文件的集合 Worksheets/Sheets - 类别:集合/属性,返回类型:Worksheet集合,含义:当前活动的Excel文件中Worksheet的集合 Rows - 类别:集合/属性,返回类型:Range,含义:当前活动Sheet的所有行 Columns - 类别:集合/属性,返回类型:Range,含义:当前活动Sheet的所有列 Cells - 类别:属性,返回类型:Range,含义:当前活动Sheet中所有的单元格 ThisWorkbook - 类别:属性,返回类型:Workbook, 含义:当前正在运行的Macro所在的Excel文件 ActiveWorkbook - 类别:属性,返回类型:Workbook,含义:当前活动的Excel文件 ActiveSheet - 类别:属性,返回类型:Worksheet,含义:当前活动的Sheet ActiveCell - 类别:属性,返回类型:Range,含义:当前活动的单元格(不一定是一个,可能是一组) Range - 类别:属性,返回类型:Range,含义:指定的一组单元格,需要提供参数 Selection - 类别:属性,返回类型:选中的对象类型(如Range,Chart等),含义:当前Macro执行的目标文件中选中的对象 WorksheetFunction - 类别:集合/属性,返回类型:WorksheetFunction对象,含义:返回所有Worksheet内置的函数 从Application代表着可视化元素分析得到下列成员: Dialogs - 类别:集合/属性,返回类型:Dialogs集合,含义:Excel所有内置的对话框 CommandBars - 类别:集合/属性,返回类型:CommandBars集合,含义:Excel所有菜单和工具栏 StatusBar - 类别:属性,返回类型:String,含义:Excel状态栏上的文本 InputBox - 类别:方法,返回类型:Variant,含义:显示一个让用户输入的对话框,可以指定录入的数据类型并验证。如果点击取消,则返回False。 其余常用的方法成员: Run:运行执行的宏或函数。 Quit:退出Excel。 SendKeys:模拟键盘操作(%代表Alt, ^代表Ctrl, +代表Shift,其余特殊键如Tab要加'{}',如'{Tab}', '{Enter}'等),这个函数一般用于当不能用Excel中的对象和函数解决相关问题的时候,可以模拟用户按键盘的方式完成默写功能。 OnTime:延时运行一个函数。 Evaluate:计算传入字符串参数代表的对象或值。 GoTo:选中指定条件的范围并激活。 ActivateMicrosoftApp:激活一个微软的程序,比如计算器(0),Word(1)等等。 GetOpenFileName:打开“打开文件”对话框,返回选中的文件的名字,但并不真打开。 GetSaveAsFileName:打开“另存为”对话框,返回用户选中或输入的名字,但并不真保存。 ActiveWindow:获得当前活动的窗口。 FindFile:显示“打开文件”对话框,并打开选中文件,打开成功则返回True,否则返回False。 Intersect:获得两个Range对象的重叠区域。 其它常用的属性成员: ScreenUpdating:是否关闭屏幕刷新,一般一些操作的时候不想立即显示出来,就可以先关闭,做完操作以后开启。 DisplayStatusBar: 是否显示状态栏。 Version:当前Excel的版本号(12代表2007,14代表2010...),保存文档选择格式的时候可以使用这个信息。 DefaultFilePath:打开或保存文件时的默认路径。 CutCopyMode:推出剪切/复制模式的话,程序中选中目标的虚线框就不显示了,一般如果有剪切或复制操作后,都要把这个设为false。 DisplayAlerts:是否显示警告框。 FileDialog:获得“打开文件”对话框对象,可以用Show去显示,也可以设置这个对话框的一些属性。 2. Workbook 描述层级关系的几个成员: Worksheets/Sheets - 类别:集合/属性,返回类型:Worksheets集合,含义:当前活动的Excel文件中Worksheet的集合。 Connections - 类别:集合/属性,返回类型:Connections集合,含义:当前数据源的数据连接。 ActiveSheet - 类别:属性,返回类型:Worksheet,含义:当前活动的Sheet。 其它常用的属性: Name:指定Workbook对应的Excel文件的文件名。 FullName:指定Workbook对应的Excel文件的全路径。 Names:指定Workbook中所有命名的名字集合。 Path:指定Workbook对应的Excel文件的路径(不包含文件名)。 Password:打开Workbook需要的密码。 Saved:指示当前的Workbook是否已经保存了,是只读的。 其它常用的方法: Activate:激活指定的Workbook。 Close:关闭Workbook对应的文件。 Save:保存Workbook对应的文件。 SaveAs:另存为新的文件,不会出现对话框。 RefreshAll:刷新Workbook中所有的外部数据资源与数据透视源。 3. Worksheet 常用的成员包括: Name - 类别:属性,含义:获取或设置指定Worksheet的名字。在Excel中,手动操作是双击Sheet的名字位置,然后修改。 Copy - 类别:方法,含义:复制Sheet到新的位置,会生成新的Sheet。 Delete - 类别:方法,含义:删除Sheet。 Move - 类别:方法,含义:移动Sheet到新的位置。 Paste - 类别:方法,含义:粘贴Clipboard中的内容到Sheet中。 PivotTables - 类别:方法,含义:返回当前Sheet中的指定的数据透视表或者所有数据透视表。 Rows - 类别:集合/属性,含义:返回当前Sheet中的所有行 Columns - 类别:集合/属性,含义:返回当前Sheet中的所有列 Cells - 类别:集合/属性,含义:返回当前Sheet中的所有的单元格(用行和列的Index标识) Range - 类别:集合/属性,含义:返回当前Sheet中的所有单元格(用行列的字符串标识) UsedRange - 类别:集合/属性,含义:返回当前Sheet中的用户使用的范围,这个是相当有用,它的很多属性都是居家生活必备良品。 Shapes - 类别:集合/属性,含义:返回当前Sheet中所有的Shape对象,如自选图形,多边形,OLE对象,图片等。 4. Range 与 Cells 实际上,Excel的对象中并没有Cell对象,所有的Cell相关的区域全部用Range来标识。同时Cells是存在的,它代表当前Sheet中所有的单元格,它的类型是Range,它存在的价值在于:Range用字符串来标识单元格,但是有时候循环的时候,用行列的Index来标识单元格更方便操作,特别是当要处理当前Sheet中的所有单元格时,Cells就派上用场了。 Range对象是Excel操作最为核心的对象,几乎所有的操作最终都是反映到该对象上,所以熟悉这个对象的常用成员是非常重要的。要引用Range对象,可以直接使用单元格区域的名字,地址等字符串,设置起始结束单元格格式,除了这个,使用Offset,Resize方法,或者最简单的使用'[]'也可以引用相关Range对象。例如: Range('A1')=1
Range('MyCell').Value = 1 '使用了单元格的名称 Range('A1:B10').Value = 1 Range('A1, A3, A5') = 'XYZ' Range('A1', 'B10') = 1 strValue = [A1:B1]
Range(Cells(0,0),Cells(5,5)).Clear Range('A:A').EntireColumn.AutoFit '自动调整A列宽度 Range对象常用的成员如下所示: Row, Column:返回Range对象中所有区域中第一块区域的第一行行号,第一列列号,返回类型为Long。 Rows, Columns:返回该Range对象包含的所有行,所有列,返回类型为Range。 CurrentRegion:返回四面被空行和空列包围的一个新的Range对象,这个新的Range对象包含当前Range对象(不管当前的Range是不是空行空列),这个属性在相当一部分操作中都是很重要的,特别是当目标Range的行列位置不确定时可以用这个属性返回目标区域。 Count:返回Range对象包含的单元格的数目,返回类型为Long。 Value:Value代表Range对象的值,类型为Variant,可读可写,写的时候会把Range中所有单元格都设为相同值。 Offset, Resize, End:这几个都与选择Range的范围有关,Offset强调返回Range对象指定偏移方向上的单元格,执行这个操作后返回的是偏移后的单元格;Resize强调扩充当前的Range对象;End返回包含该Range的指定方向上的最后一个单元格,常用于返回用户使用的最大的行与列。 Formula:返回或设置Range对象的公式,用于大范围填充或计算数据时很方便。 AutoFill:自动填充Range对象中的所有单元格,用于大范围填充数据时很方便。 SpecialCells:返回Range对象中满足一定条件的单元格,返回类型为Range,用于大范围填充数据的时候,配合使用可以有奇效。 Select, Clear, Copy, Cut, Paste, PasteSpecial, Delete:这一组为最基本的操作,不解释。 MergeCells:返回Range对象中是否包含合并的单元格,返回类型为Boolean。 Merge, UnMerge:合并,取消合并Range对象中的单元格。 Areas:Range对象可以是不连续的,每个不连续的区间就用Area标识。 Address:Range对象的地址,以行列形式返回字符串,这个有时候很方便。 VerticalAlignment, HorizentalAlignment:Range对象中单元格的对齐方式。 Worksheet:当前Range所在的Sheet,属于反向的引用,有时候能派上用场。 5. Selection Selection代表了Sheet中选中的内容,如果选中的是单元格,那么它返回的就是Range对象,如果选中的是其他元素,则返回的就是其他对象。它是Application的一个相当重要的属性。一般来说,当Range对象执行Select方法后,Selection的表演就正式开始了。之所以单拿出这个属性来强调一下,是因为它的地位很重要,它代表了一种操作思想,虽然选中单元格再操作并不总是很好的手法(说来说去还是效率的问题,后面我会单独总结一下这个方面的做法),但是很多时候,这么做确实是很多人的首要选择,原因很简单,因为很自然,很直观,我们可以看着Excel一步一步完成我们想要的每个步骤。
|
|
来自: Excel实用知识 > 《VBA与EXCEL》