Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 7122|回复: 12

[分享] 【烟花原创】VBA零基础之第29篇 对象(四)

[复制链接]
发表于 2013-11-23 00:38 | 显示全部楼层 |阅读模式
本帖最后由 hwc2ycy 于 2013-12-4 21:16 编辑

  今天我们聊聊如何在VBA代码里引用对象
  引用对象是非常重要的,因为在代码里访问对象时必须指明需要操作的对象。
  例如在日常中我们找某人的,肯定会喊某人的名字(不认识的可以喊美女帅哥),人家才会理你。
  可在
VBA代码中,你必须实打实的指明某个特定的对象(或者从集合中引用某个特定的成员),代码才会响应你。
  上节有讲到集合,通过情况下,我们都是引用集合中某个特定的成员对象。
  如何从集合中引用一个对象呢,只需在集合的名称后面的括号中放入过索引号或对象名就行了。
  示例:
   Worksheets ("sheet1")
   '当前活动工作簿中的工作表集合中的第一个工作表
   Workbooks (1)
   '工作簿集合中的第一个

  当我们输入的索引号或名称无效时会有一个下标越界”的错误提示。
  当看到这个错误提示时,就要检查引用集合时的所用的索引号或名称是否有误。

  注意:这里有个问题,比如当前工作簿中有一个工作表的名称为1,在没有隐藏工作表的情况下,该工作表排在第2位。
  当用索引号访问这个工作表时得这样写:
worksheets(2)
  当用名称访问这个工作表名称为1的工作表时就得这么写 Worksheets ("1")
  当然,你也可以用变量来代替1”1”
   Dim i As Integer, s As String
   i = 1
   s = "1"
   Debug.Print Worksheets(i).Name, Worksheets(s).Index
   '在立即窗口显示工作表集合中第一个工作表的名称,以及名称为1的工作表的索引号。

  之前有讲过
Excel应用程序对象包含了很多的对象,而这些对象自身又包含了其他很多的对象。
  当我们需要访问
Excel应用程序对象时,这是很容易的,只需要在代码区中键入Application
  其他所有的对象都在Application之下,当我们需要访问某个对象时,就需要一级一级访问。
  如果把
Excel比做一栋楼,当我们需要访问到Excel这栋楼房中的1003住户(工作表),我们先进楼,再坐电梯到10楼(工作簿),再找到1003房间(单元格),敲1003家的房门,进入后里面还有几间,象什么主人房,小孩房,书房,厨房这些啥(单元格的属性),咱还可以访问1003家的某个房间(属性)。
  我们把这个过程用个列表简化下
    大楼(Excel)--10楼(工作薄)--1003住户(工作表)--客厅(Value属性)
    我们访问1003的客厅,就经过了这么几个环节。
  咱回到Excel中来继续,在VBA代码中,这些层层的对象之间(上下级)咱们用圆点号相连(英文的.)。
   对象.属性.属性  第一个属性本身返回的也是对象
      对象.方法
      对象.属性
  通常在对象的名称后输入.后会有一个自动成员列表(只有极少数对象例外)。
  通过这个列表,可以知道该对象有哪些属性,方法和事件。如果选中某个属性,而该属性返回的又是一个对象时,再在属性名后输入
.号后还是会有自动成员列表的。
  这个自动成员列表,对于我们输入代码还是很有好处的,可以少记很多属性和方法,提高代码的录入速度。


    现在看看如何来实现层层引用的:
  比如我们要访问当前
Excel中的名称为工作簿1.xlsm 的工作簿时,可以这么写
   Applcation.workbooks("工作簿1.xlsm")
  再接上面,如果我要访问工作簿1.xlsm 中的工作表 sheet1时,就在上面的引用后面再加上工作表的引用
   Applcation.workbooks("工作簿1.xlsm").worksheets("sheet1")
  再继续扒(感觉象是娱记暴料)单元格A3,那就再加个range对象
   Applcation.workbooks("工作簿1.xlsm").worksheets("sheet1").range("a3")
  再继续挖,要获取A3单元格的值时
   Applcation.workbooks("工作簿1.xlsm").worksheets("sheet1").range("a3").value

  扒了这么多,不知大家绕晕了没。天啦,Excel对象何其多,才访问4级就这么长了,要是有十几层咱办?
  这个写法咱姑且称之为完整引用(一般也不会这么写的)


  既然是完整引用,相对来说,肯定还会有个懒人引用法。

  首先由于代码是在Excel中运行,引用的也是Excel自身对象的话,再加上Application是对象层次中的顶级,一般情况下这个是可以省略的(还是有不能省略的,据观察,如果applcation下面的属性返回的是对象时,是可以省略application的)

  有了第一条,上面的可以省一截了:
   workbooks("工作簿1.xlsm").worksheets("sheet1").range("a3").value

  其次,如果工作簿1.xlsm是当前活动工作簿时,工作簿的引用可以再省略:
   worksheets("sheet1").range("a3").value

  再来,如果工作表 sheet1 是当前活动工作表时,工作表集合的引用也可以省略:
   range("a3").value

  当然省了这么多,如果还要减字符的话,其实value也可以省略(某些场合不能省)。
  range(“a3”).value,省到这个情况下,前面咱不是有讲到当在对象后面输入.后会有自动成员列表嘛,所以value这个属性也没有再省略的必要了。

  友情提示:在写代码时,相关的符号注意用英文半角。书写错误时代码区相应的行会以红色显示并伴有提示的。
 

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-12-11 13:09 | 显示全部楼层
回复

使用道具 举报

发表于 2013-12-11 14:00 | 显示全部楼层
回复

使用道具 举报

发表于 2013-12-14 16:23 | 显示全部楼层
学习学习,下载保存
回复

使用道具 举报

发表于 2014-4-3 17:30 | 显示全部楼层
学习,
回复

使用道具 举报

发表于 2014-5-7 15:02 | 显示全部楼层
学习
回复

使用道具 举报

发表于 2014-6-16 14:06 | 显示全部楼层
很清晰
回复

使用道具 举报

发表于 2014-6-16 21:51 | 显示全部楼层
谢谢分享
回复

使用道具 举报

发表于 2014-6-16 23:53 | 显示全部楼层
Worksheets ("sheet1")
   '当前活动工作簿中的工作表集合中的第一个工作表
这里应是工作表集合中名称为sheet1的工作表
谢谢分享,标记,二十九
回复

使用道具 举报

发表于 2014-6-17 17:17 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 19:24 , Processed in 0.176089 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表