大家好,我们今日继续讲解VBA代码解决方案的第123讲内容:利用单元格的Offset属性和Resize属性改变选择区域的大小.我们在操作EXCEL时候,按下鼠标,拖动就会完成一个区域的选择,那么这个动作是否可以通过VBA代码来实现呢?
在上一讲中我们谈到了Offset属性,这个属性是单元格属性中应用灵活的一个属性,也非常好理解,当使用Offset属性时,改变选择区域的大小,就可以实现我们刚刚提出的问题。
假设开始选择的区域是A6:A15,如何 将选择区域向下移动两行,向右移动两列,然后再改变新选择区域的大小呢?假设新的选择区域应 该是C8:F9。Offest属性只能完成前面部分向下移动两行,向右移动两列这个动作,实现后面部分要求另外一个属性来完成。这个就是Resize属性
Resize属性的语法为:Range对象.Resize(RowSize,ColumnSize)
扩展特定的单元格,返回一个由参数RowSize和ColumnSize指定行列数的单元格区域。
其中:
a 参数RowSize指定新单元格区域的行数。若省略该参数,则新单元格区域的行数与原来相同。
Range('A1').Resize(1, 3).Select等价于代码:省略了第一个参数Range('A1').Resize(, 3).Select都将选择单元格区域A1:C1。
b 参数ColumnSize指定新单元格区域的列数。若省略该参数,则新单元格区域的列数与原来相同。
C 利用Resize属性对单元格进行扩张时,是以原单元格为起始点但包括原单元格本身的扩张。
我们可以结合Offset属性和Resize属性来回到上面的问题。在你结合这两个属性之前,
Range("A6:A15").Select
Selection.Offset(2, 2).Select
Selection.Resize(2, 4).Select
下面我们来分析上述代码的执行过程:录入代码如下
Sub mynzDM()
Sheets("sheet5").Select '定位在sheet5工作表
Range("A6:A15").Select
Selection.Offset(2, 2).Select
Selection.Resize(2, 4).Select
End Sub
代码截图:
为了看到每个步骤我设置了断点。
点击执行:
1 截图1
第一条指令选择区域A6:A15,当前活动单元格是A6。
2去掉代码Selection.Offset(2, 2).Select的断点,截图2
第二条指令将选区偏移到C8:C17。活动单元格C8处于原单元格A5的向下两行和向右两列(大家要记住这个两行和两列是不含原单元格的)。现在,活动单元格是C8。
3 去掉最后的断点,执行:
最后一条指令将当前选区 改变大小,单元格区域C8:F9被选中了,而不再是C8:C17。此时的或多单元格是C8, Selection.Resize(2, 4).Select ,就是C8的单元格向下扩展两个,向右扩展4个(这时的扩展是将起始的活动单元格计算在内的)
当然,后面两行指令可以结合成下面方式: Selection.Offset(2, 2).Resize(2, 4).Select
上面的例子,别看简单,其实分成了三个步骤:
第一步:Offset属性计算得到新区域的起始点,
第二步:Resize 属性决定新选区的大小,
第三步:Select方法选取具体的单元格区域。
在我们实际程序的编写中会经常用到的指令是ActiveCell,会代替活动单元格的具体位置,这样一来你的程序会大大的简化。如代码:ActiveCell.Offset(-3, 0).Select 都是经常用到的。
今日内容回向:
1 Resize 属性的意义是什么?
2 如何改变选择的区域呢?
《VBA代码解决方案》终于可以和大家见面了,是我将一些非常实用的VBA内容结集成册,PDF文件,可以从中直接查找到你想要解决问题的思路和方法,可以复制文中的VBA代码直接使用。有需要的朋友微信联络我NZ9668。