引用- VBAProject 可使用的引用④ M Visual Basic For Applications 取消 M Microsoft Excel 12. 0 Object Library E Automati on osoft 12.0.Obiect Libra 浏览 口 atpvbaen.,zls Microsoft Forms 2.0 Object Library IAS RADIUS Protocol 1.0 Type Lib 帮助a □ Acrobat Acrobat Access 3.0 Type Library at Distill Acrobat WebCapture 1.0 Type Library Microsoft Office 12.0 Object Library FEf: C: \Program Files \Common Files \Microsoft Shared\OFF 语言 标准 默认情况下,VBA已经为我们自动添加了一些必要组件的引用,所以大多是时候 我们可以完全忽略以上的步骤,直接写代码。但如果想用一些额外的组件,就需 要手动添加了。 每个对象会有如下几种成员: 方法:表示一种动作。这和上次讲的一般的Sub是没什么区别的,只不过 它代表针对当前对象的动作。比如上面提到的 Workbooks.Add中的 Workbooks是一个对象(更确切的说,是一个集合对象,下面再详述) 而Add就是这个对象的方法,用于执行“新建一个 Workbook”这个动作 函数:表示一种具有返回值的功能。这和上次讲的一般的 Function是没 什么区别的,只不过它代表针对当前对象的功能。 属性:表示对象所带有的某种信息。比如 Window对象具有 Captain这样 的属性,表示其标题栏的标题; Height和 Width属性表示 Window对象的 宽和高等等。通过改变这些值就可以改变对象所代表的实体,比如改变其 外观。每个属性即可能是一个对象,也可能是一个基本类型的变量。每个 属性都属于一个类型。 值得注意的是有两种特别的属性。第一种是“只读”的属性。就是说你不能改变 它,而仅仅能读取它。比如单元格的Text属性就是只读的。 Excel根据单元格 的 Value和应用于此单元格的 Format来决定Text是什么。所以如果非得要改的 话,需要改 Value或者 Format。另一种是所谓“集合”的属性。表示当前对象 包含一组子对象。直观上,一个 Application包含多个 Workbook,个 Workbook 包含多个 Worksheet,一个 Worksheet包含若干的 Range。对象也正是这么嵌套 的。比如你想获得第一个 Workbook的第一个 Worksheet的A10单元格需要这么 写 Application Workbooks(1). Worksheets(1) Range (A10")
对象 14 默认情况下,VBA 已经为我们自动添加了一些必要组件的引用,所以大多是时候 我们可以完全忽略以上的步骤,直接写代码。但如果想用一些额外的组件,就需 要手动添加了。 每个对象会有如下几种成员: • 方法:表示一种动作。这和上次讲的一般的 Sub 是没什么区别的,只不过 它代表针对当前对象的动作。比如上面提到的 Workbooks.Add 中的 Workbooks 是一个对象(更确切的说,是一个集合对象,下面再详述), 而 Add 就是这个对象的方法,用于执行“新建一个 Workbook”这个动作。 • 函数:表示一种具有返回值的功能。这和上次讲的一般的 Function 是没 什么区别的,只不过它代表针对当前对象的功能。 • 属性:表示对象所带有的某种信息。比如 Window 对象具有 Captain 这样 的属性,表示其标题栏的标题;Height 和 Width 属性表示 Window 对象的 宽和高等等。通过改变这些值就可以改变对象所代表的实体,比如改变其 外观。每个属性即可能是一个对象,也可能是一个基本类型的变量。每个 属性都属于一个类型。 值得注意的是有两种特别的属性。第一种是“只读”的属性。就是说你不能改变 它,而仅仅能读取它。比如单元格的 Text 属性就是只读的。Excel 根据单元格 的 Value 和应用于此单元格的 Format 来决定 Text 是什么。所以如果非得要改的 话,需要改 Value 或者 Format。另一种是所谓“集合”的属性。表示当前对象 包含一组子对象。直观上,一个 Application 包含多个 Workbook,一个 Workbook 包含多个 Worksheet,一个 Worksheet 包含若干的 Range。对象也正是这么嵌套 的。比如你想获得第一个 Workbook 的第一个 Worksheet 的 A10 单元格需要这么 写: Application.Workbooks(1).Worksheets(1).Range("A10")
可以看到大多数集合对象比常规对象的名称多一个s,表示复数(这是一种习惯, 而不是语法要求的。比如 Range就没有s)。另外取得集合中的某一个对象即可 以用对象索引值来获得(记得索引值是从1开始算的,而不是0),也可以用过 对象的名称,比如如果你的第一个工作表又叫“ My Sheet”,那么上面的语句可 以等价的写为: Application Workbooks(1). Worksheets( MySheet ) Range(A10") 你可以注意到访问对象成员的语法就是在对象名成后边加”.”。确切的语法是: [对象名].成员名] 下图是Exce对象结构的一个概览。虽然总共有一百多个对象,但是实际上经常 使用的仅仅只有 Application, Workbook, Worksheet, Range, Window, Chart, Shape这么几个。(图是从帮助里截下来的,所以那个箭头点了不会有效果:)
对象 15 可以看到大多数集合对象比常规对象的名称多一个 s,表示复数(这是一种习惯, 而不是语法要求的。比如 Range 就没有 s)。另外取得集合中的某一个对象即可 以用对象索引值来获得(记得索引值是从 1 开始算的,而不是 0),也可以用过 对象的名称,比如如果你的第一个工作表又叫“MySheet”,那么上面的语句可 以等价的写为: Application.Workbooks(1).Worksheets("MySheet").Range("A10") 你可以注意到访问对象成员的语法就是在对象名成后边加”.”。确切的语法是: [对象名].[成员名] 下图是 Excel 对象结构的一个概览。虽然总共有一百多个对象,但是实际上经常 使用的仅仅只有 Application, Workbook, Worksheet, Range, Window, Chart, Shape 这么几个。(图是从帮助里截下来的,所以那个箭头点了不会有效果:)
icrosoft excel对象 Workbooks (Workbook) Worksheets (orksheet)D Answer AutoCorrect Dcu睡 entProperties ocumentProperty】付 Assistant AutoR ustomViers (CustomVien) CellFornat dEars c@山Bar 0■ AddIns CO■ AddIn) H■ LProject Debug PivotCaches (PivotCache) Di logs ialog) Styles (Style) FComsandBars (CommandBar) Borders order) ErrorCheckinguptions Fon Ln忍u心 Settings nter H indows indow Windows indow nes①ane) forksheetfaneti Eece让s《ece PublishObjects (PablishObject] x七 ragRecogmizers SaartTagOptions HSaartTagRecogmirer TebOptions peech 图例 时象和集合 dFileSearch VBE 单击箭头可展开图表 ODBCErrors (ODBCError FOLEDBErrors (olEDBError) Defaultiebl Watch Tatel IRtdserver IRIDUpdateevent
对象 16
我们可以定义一个变量来指向某个对象。这称为“对象的引用”(注意要和组件 引用的概念区分开)或者引用变量。之所以用引用的方式访问对象的原因是对象 比起常规变量都大的多。如果像普通变量那样每Dim一次就分配整个对象的内存, 非常浪费空间。所以,对象的引用只包含对象在内存地址而已。当然,我们通过 对象的引用还是能够直接操作对象。比如下面的代码 Dim a As Range, b As Range Set a Range(A10") Set b= Range(A10") 就定义了两个对象引用a和b,它们指向同一个对象 Range("A10")。逻辑上如下 图所示: Range 所以,如果用a. Value=xxx改变了对象的值,b. Value也能反映出变化。这和 定义两个整数变量,各自独立的语义是不一样的。 另外需要注意的是,对对象引用进行赋值的时候需要加Set关键字,表示传递的 是引用。如果不加Set,就等价于对对象的默认属性赋值。如果a指向 Range("A1") 对象,那么写 a =abc 等价于 a value ="abc 因为 Value是 Range对象的默认属性。 但是如果你写 就会出错。所以不要忘记Set关键字。 那么什么时候对象会释放掉内存呢?每个对象有一个内部的引用计数。每添加 个引用就能使引用计数增加1。如果你确认某个引用不再使用了,就写 a= Nothing 这会让引用计数减1。当对象的引用计数为0的时候就会自动销毁释放内存
对象 17 我们可以定义一个变量来指向某个对象。这称为“对象的引用”(注意要和组件 引用的概念区分开)或者引用变量。之所以用引用的方式访问对象的原因是对象 比起常规变量都大的多。如果像普通变量那样每 Dim 一次就分配整个对象的内存, 非常浪费空间。所以,对象的引用只包含对象在内存地址而已。当然,我们通过 对象的引用还是能够直接操作对象。比如下面的代码: Dim a As Range, b As Range Set a = Range("A10") Set b = Range("A10") 就定义了两个对象引用 a 和 b,它们指向同一个对象 Range("A10")。逻辑上如下 图所示: 所以,如果用 a.Value = xxx 改变了对象的值,b.Value 也能反映出变化。这和 定义两个整数变量,各自独立的语义是不一样的。 另外需要注意的是,对对象引用进行赋值的时候需要加 Set 关键字,表示传递的 是引用。如果不加Set,就等价于对对象的默认属性赋值。如果a指向Range("A1") 对象,那么写 a = "abc" 等价于 a.Value = "abc" 因为 Value 是 Range 对象的默认属性。 但是如果你写 a = Range("A2") 就会出错。所以不要忘记 Set 关键字。 那么什么时候对象会释放掉内存呢?每个对象有一个内部的引用计数。每添加一 个引用就能使引用计数增加 1。如果你确认某个引用不再使用了,就写 a = Nothing 这会让引用计数减 1。当对象的引用计数为 0 的时候就会自动销毁释放内存
有人会问,100多个对象怎么找啊。答案是帮助文档。 Office自带了庞大的开发 文档。不过需要进入VBA编辑器后打开的帮助才能看得到。普通的帮助文档是找 不到这些对象的。帮助中记录了每一个对象的每个成员的详细信息,比如是做什 么的,是否是只读的,参数信息等。如下图所示 Exce帮助 合A Range ECe|207开发人员参考>Exce对象模型参考> Range对象 Range对象成员 代表某一单元格、某一行、某一列、某一选定区域〔该区域可包含一个或若干连续单元格区 域),或者某一三维区域 方法 名称 说明 激活单个单元格,该单元格必须处于当前选定区域内。要选择单 Activate 元格区域,请使用 Select方法。 AddComment 为区域添加批注。 基于条件区域从列表中筛选或复制数据。如果初始选定区域为单 Advanced Filter个单元格,则使用单元格的当前 9 ApplyNames 将名称应用千指定区域中的单元格 Applyoutline styles对指定区域应用分级显示样式 从列表中返回一个记忆式键入匹配项。如果没有相应的记忆式键 9 AutoComplete 配项,或者在列表中有不止一个与已键入字符串相匹配的 此方法将返回一空字符串。 AutoFill 对指定区域中的单元格执行自动填充 AutoFilter 使用“自动筛选”筛选一个列表。 AutoFit 更改区域中的列宽或行高以达到最佳匹配。 自动为指定区域创建分级显示。如果区域为单个单元格, Autooutline Microsoft Excel将创建整个工作表的分级显示。新分级显示将取 所有的分级显示。 Borderaround 向单元格区域添加边框,并设置该新边框的coor、 Linestyle和 eight属性。 Variant型。 说机开发人员帮助 脱机 所以,如果想找一个对象,完全没必要去录制宏那样去找。你仅仅把需要的对象 的名字翻译成英文(工作簿-> Workbook,工作表-> Worksheet,……)然后去査 文档。如果你对常用对象不熟悉的话,那么请等待下一期教程:)
对象 18 有人会问,100 多个对象怎么找啊。答案是帮助文档。Office 自带了庞大的开发 文档。不过需要进入 VBA 编辑器后打开的帮助才能看得到。普通的帮助文档是找 不到这些对象的。帮助中记录了每一个对象的每个成员的详细信息,比如是做什 么的,是否是只读的,参数信息等。如下图所示: 所以,如果想找一个对象,完全没必要去录制宏那样去找。你仅仅把需要的对象 的名字翻译成英文(工作簿->Workbook,工作表->Worksheet,……)然后去查 文档。如果你对常用对象不熟悉的话,那么请等待下一期教程:)