对象引用

  1. 对象的层次与引用方式
    1. 对象的逐层引用
    2. 使用对象名称引用对象:Workbooks("财务表.xls")
    3. 使用复数形式表示对象集合:
    4. 使用序号参数引用集合中的子对象:Worksheets(1)
    5. 引用子对象:Workbooks("生产表.xls").Worksheets("1月")
    6. 引用活动对象:ActiveWorkbook.Worksheets("总表");VBA专门给活动对象赋予了一个特别的称谓,通常使用“Active”表示活动对象;ActiveWindow,ActiveWorkbook,ActiveSheet,ActiveCell,ActiveChart,当调用活动对象的子对象时,可以忽略活动对象名称,直接引用其子对象;
    7. 引用父对象:Range("a1").Parent.Name(用于获取工作表的名称)
    8. 利用with语句引用重复出现的对象;
  2. Range对象
    1. Range("A1")引用方式
      1. 引用单元格:Range("a1");Range("B"&i+5);
      2. 引用行与列:Range("B:B");Range("B:Z");Range("2:2");Range("2:5");Columns(1);Rows(2);
      3. 引用区域:Range("a1:c5");
      4. 引用多区域:Range("C4:C11,E4:E11);
    2. Cells(1,1)引用方式;
    3. [a1]引用方式;
    4. 活动单元格:ActiveCell
    5. 下一个单元格:Next
    6. 屏幕坐标下的单元格:Window.RangeFromPoint
    7. 选区:Application.Selection、Window.RangeSelection
    8. 已用区域:Worksheet.UsedRange
    9. 当前区域:Range().CurrentRegion是指以包含当前单元格且以空行与空列的组合为边界的区域;
    10. 当前数组区域;
    11. 按条件引用区域:Range.SpecialCells(Type,Value)是指定位条件符合的单元格;如:
      ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants,7).Select
    12. 模拟Ctrl+方向键产生的单元格:Range.End(Direction)
      1. 参数,常量,说明
      2. xlToLeft,1,向左
      3. xlToRight ,2,向右
      4. xlUp,3,向上
      5. xlDown,4,向下
    13. 按偏移量重置区域引用:Range.Offset(RowOffset,ColumnOffset)
      1. Range("f6").offset(-3,-2)
      2. Offset参数更多的是使用变量;
      3. 常配合End属性使用,如合并工作簿或工作表时,将所有工作表的数据复制到汇总表中,要求按先后顺序排列,不能覆盖上一次合并的内容,此时需要定位非空行的下一行,然后再粘贴数据,而此需求需要将End配合Offset使用。
      4. Worksheets("二月").usedRange.Copy Worksheets("总表").Cells(Rows.Count,1).End(xlUp).Offset(1,0)
    14. 按宽度与高度重置区域:Range.Resize;Range("B2").Resize(2,3)
    15. 引用多区域的合集:Union(Range("A1:B10"), Range("c1:c10"));
    16. 引用多区域的交集:Intersect(Range("A1:B10"), Range("c1:c10"));
    17. 利用名称引用区域:ActiveWorkbook.Names.Add "成绩", "=$A$2:$A$10", Ture
  3. 图形对象Shapes、DrawingObjects
  4. 表对象Sheets
    1. xlChart
    2. xlDialogSheet
    3. xlWorksheet
  5. Selection对象:表示对操作区域的操作,可以用With语句,如
    With Selection.Font
      .Size=22
      .ColorIndex = 6
    End With

Range对象和Worksheet对象都有Select(选定)和Activate(激活)方法。其区别和联系如下:

一、从功能上来说,Select代表选定对象,Activate代表激活对象。

二、从数量上来说,Select可以选定多个对象,Activate只能激活一个对象。

三、对于单个对象,Select和Activate是一样的。

四、Activate的对象必定在Select对象之中。当选定了多个对象时,其中某个对象必定是激活的对象。在已经Select的对象中,可以任意指定Activate的对象。如果Activate了当前Select对象之外的对象,则相当于重新执行了一次Select并激活。

五、在每次重新Select之后,则系统会自动Activate其中的某个对象。

 

select,selection

Activate,activecell

activecell.CurrentRegion.Select

 

单元格区域的端点选择(B5:G17)

1 选取B列第一个非空单元格

If Range("B1") = "" Then

  Range("B1").End(xlDown).Selcet

Else

  Range("B1").Selcet

End if

 

2 选取B列最后一个非空单元格

Range("B65536".End(xlUp).Select

 

3 选取11列最左边非空单元格

If Range("A11") = "" Then

  Range("A11").End(xlToRight).Selcet

Else

  Range("A11").Selcet

End if

 

4 选取第17行最右边非空单元格

Range("IV17").End(xlToLeft).Select

 

(end()方法单元格的选取,从空到非空,从非空到空;)

已选取单元格区域范围和大小(B5:D14)

1 返回选取区域的总行数和总列数

Selection.Rows.count

Selection.Columns.count

 

2 返回选取区域的第一行的行号

Selection.Row

 

3 返回选取区域左上角的单元格

Selection.Range("A1").Address

 

4 返回选取区域右上角的单元格

Cells(Selection.Row,Selection.Column+Selection.Columns.Count-1).Address

 

5 返回选取区域左下角的单元格

Cells(Selection.Row+Selection.Row.Count-1,Selection.Column).Address

 

5 返回选取区域右下角的单元格

Selection.Cells(Selection.Cells.count).Address

 

选取全部单元格的方法

1 Cells.select

2 Rows.select

3 Columns.select

 

选择特定单元格

1 选取当前已使用的单元格:ActiveSheet.UsedRange.Select

2 选取的指定单元格相邻的区域:Range("address").CurrentRegion.Select

3 选取特定内容单元格:Range("address").SpecialCells(单元格类型变量)

 

移动和改变单元格选取范围

Offset(A1,2,1,6,3),表示,以A1为参照点,偏移(2,1),选取6行3列;

Range("A1").Offset(2,1).Resize(6,3).Select

其它

选择某一列的全部空行

Columns(1).specialCells(xlCellTypeBlanks).EntireRow

 

利用定义名称获取对象

Sheets(1).Shapes("按钮 2").Width = Sheets(1).Shapes("按钮 1").Width * 2

利用集合中的索引号来调用对象。

Sheets(1).Shapes(i).Width = 100

前面的对象引用方式可以确保总能正确的引用对象,然而却是牺牲效率来实现的。当所引用的对象是当前活动对象时VBA提供了简化的引用方式。

在引用活动对象时是不需要罗列其上层对象的,而是直接使用“ActiveCell”或者“ActiveWorkbook”等等。

在写法上较后者更简洁,而且在执行效率上也有大大的优势。

With语句的功能是代码减肥,且加快快程序执行速度。不过它的前提条件是同一对象需要多次引用时。

如果在工作表事件中使用Me,则它代表当前工作表;如果在工作簿事件中使用Me,则它代表工作簿;如果在窗体中使用Me,则它代表窗体对象。

Range("ZZ1048576")——表示ZZ1048576单元格,在Excel 2003中是无效的引用,因为Excel 2003的最大行不超过65536行,最大列不超过IV列

SpecialCells:按条件引用区域

Range对象的SpecialCells方法可以返回一代表与指定类型和值匹配的区域。它的具体参数为:

表达式.SpecialCells(Type,Value)其中“表达式”表示单元格对象,“Type”参数表未单元格类型,“Value”参数是可选参数,只在“Type”参数为xlCellTypeConstants或xlCellTypeFormulas时用,用于确定结果中应包含哪几类单元格。

 

Resize用于调整指定区域的大小,返回代表调整后的区域。它有具体语法为:Range.Resize(RowSize,ColumnSize)

其中参RowSize代表重置后的行数,ColumnSize代表重置后的列数。两个参数皆为可选参数,

 

Range对象的Offset属性可以返回一个Range对象,代表位于指定单元格区域的一定的偏移量位置上的区域。其具体语法如下:

Range.Offset(RowOffset,ColumnOffset)

 

Union:单元格的合集

单元格合集即将多个单元格或者区域并为一个区域。

在工作中,需要用到合集的地方较多,特别在查找目标单元格时。引用区域集合可用Application对象的Union方法,其具体语法为:

Intersect:单元格、区域的交集

交集是指两个或者是多个区域的重叠部分。

 

End:引用源区域的区域尾端的单元格

如果活动单元格在一个较大的数据区域中间,按下快捷键【Ctrl+上箭头】、【Ctrl+下箭头】、【Ctrl+左箭头】、【Ctrl+右箭头】可以迅速将当前单元格移至已用区域的边缘;如果整个工作表均为空白则可以在最小行、最小列或者最大行、最大列之间切换;如果在空白区向数区域使用同方向的快捷键,则可以定位于该行(列)的第一个或者最后一个非空单元格。

Range对象的End属性正好对应于以上四个快捷键,可以实现最上端、最下端、最左端和最右端的切换。它的具体语法为:

Range.End(Direction)