Re: [算表] EXCEL VBA Range.Select 选取指令问题

楼主: newacc (XD)   2019-12-12 01:09:09
我想先说明Select和Selection是什么
Select是Range物件底下的一个"方法"
对应到键鼠操作就是"选取"的这个动作
如:Range("L3").Select,就是选取L3这个储存格(Range物件)的意思
而Selection是Application物件底下的一个"属性"
会回传目前选取的物件
有可能是一个或多个储存格(Range物件),也有可能是一张图片之类
以我自己的经验,只有在人机互动的状况下才会用到Select和Selection
例如自创一个快捷键将选取的储存格上色、修改数值格式等等
而在一般自动化的过程中,不太需要叫excel把某个物件选起来,再对该物件做事
直接对某物件下指令即可
现在来看看这行程式码有什么问题:
Selection.AutoFill Destination:=Range.Offset(1).Select
Selection.AutoFill 没有问题,有可能需要操作的储存格是不特定的,必须由人工指定
Destination:= 也没有问题,是AutoFill方法中的一个变量名称
Range.Offset(1).Select 这里就有两个问题了
1.Range需要指定参照才会回传一个Range物件
举个例来说,在班级里点名时,"座号3号.起立"才会是某位特定同学站起来
如果只有说"座号.起立",大家应该会一脸黑人问号
2.这个是AutoFill方法中的变量,是为了指定自动填入的范围
所以这个变量要输入的是一个Range物件
但Select是叫excel把那个Range物件选起来
excel反而会不知道选起来之后要干麻
正确的用法就是像你录制的这个:
Selection.AutoFill Destination:=Range("L3:L53")
到这里,你真正的问题应该是,要怎么指定资料末端的储存格?
方式很多,详见上篇S大的推文
简单说就是依照你资料的特性,利用S大提到的那些方法、函数找到最后那个储存格
我自己习惯一招打天下,再依资料做调整
Range("L3", Range("L" & Rows.Count).End(xlUp))
从L3开始到 Range("L" & 列的总数).End(xlUp)
从L3开始到 L栏最后一个储存格.End(xlUp)
从L3开始到 L栏最后一个有值的储存格
前提是L栏最后一个储存格是空的
所以如果资料会塞那么满或那么后面的话,使用上要特别注意

Links booklink

Contact Us: admin [ a t ] ucptt.com