赞
踩
一、简单演示
二、新对象/方法的介绍
1. [] / Range / Cells
代表一个单元格或单元格区域,这是非常基本、用法也非常多的对象。
我们看一个汇总说明。
对固定单元格和固定范围的表示,用 [] 是最简单也最直观的,用 Range 也还可以,只是书写起来稍为啰嗦,而用 Cells,既不直观,也不便捷。
但对于单元格变量,[] 已经无能为力。用 Range 表示列号固定,行号变化的单元格变量,还是不错的,但用来表示列号变化的单元格变量,就显得有些尴尬了。而 Cells,每次只能表示一个单元格,在需要表示一个区域的时候,需要跟 Range 结合起来使用。
Rang 和 [] 一样,用的是 A1 的表示样式,符合我们的习惯。而Cells用的(行号,列号)的样式,需要适应。但“行列号都变化的变量”,只有依靠 Range 和 Cells 的搭配才能完成。
2. [A65535].End(xlUp).Row()
由A65535这个单元格开始,从下往上,直到遇到非空单元格,返回行号,这里的 xlUp 是 VBA 定义的一个常量。注意:这个代码会跳过隐藏行。
3. [A1].CurrentRegion.Rows.Count()
由A1这个单元格开始,从上往下,直到遇到非空单元格,返回行号。注意:会识别隐藏行,而且,相邻列会对结果造成影响。
第 2 和第 3 是非常实用的两个求最大行号的方式,在后面的实例中,用到非常之多。
4. [AAA1].End(xlToLeft).Column()
[A1].CurrentRegion.Columns.Count()
跟上面返回最大行号的用法类似,返回的是最大列号。
对于第一种,单元格从第一列最后一个单元格 A65535,变换为第一行非常靠后的一个单元格 AAA1,另外 xlUp 变换为 xlToLeft,同样的,这个也是 VBA 定义的一个常量,最后,Row()变换为Column()。
第二种,单元格还是 A1不变,只是把 Rows 变换为 Columns。
5. Value
设置或者获取单元格的值。
6. MsgBox
弹窗显示,用于简单测试一些执行结果时,非常有用。如果需要一直在代码窗口中进行测试,可以用 Debug.Print,然后打开 视图 中的 立即窗口进行结果的获取。
7. Chr
返回指定字符码所代表的字符。目前常用的有两个:Chr(10)=换行符,Chr(13)=回车符,基本没什么区别了。
有兴趣的朋友可以自己试试把下面语句写到宏里,运行看看区别:
[B1] = "a" & Chr(10) & "b"
[C1] = "a" & Chr(13) & "b"
注释:运行以后,Chr(10)会把自动适应的行拉宽,而Chr(13)需要双击单元格才会拉宽。
三、执行过程分析
1、子过程1——在最后行追加写入
第一个子过程 firstblood() 是 WE001 期的改版,通过 For Each 获取每个子表的名字,然后在 A 列的最后一行追加写入。
每次写入的时候,获取当前的最大行号 rmax,然后写入到 rmax+1 行。
建议看 视频版 或者第一部分内容,获取运行结果。
2、子过程2——对比获取最大行号的两种方法
第二个子过程 Maxline(),分别通过两种方式获取最大的行号,然后用 Msgbox 显示结果。
建议看 视频版,获取运行结果。
结果分别是8和4,8 我们很容易理解,A列从下往上,遇到有内容的行就是第 8 行。4则是从上往下,虽然 C 列有内容,但对结果并没有造成影响,返回结果是4。
但如果,我们在 B5 这里填上内容,很有意思——结果变成 8 和 11 了,B 列的内容,联系了 A 列和 C 列的内容,同时对 rmax2 产生了影响。
我们把第 4 到 8 行隐藏起来,结果变成 3 和 11 了。隐藏行,对 rmax1 产生了影响,但对 rmax2 没有影响。
所以,结论就是刚才我们所说的:
[A65535].End(xlUp).Row(),由 A65535 这个单元格开始,从下往上,直到遇到非空单元格,返回行号——不对隐藏行进行判断。
[A1].CurrentRegion.Rows.Count(),由 A1 这个单元格开始,从上往下,直到遇到非空单元格,返回行号——会识别隐藏行,并且,相邻的列会对结果造成影响。
这两种代码,虽然不同点比较多,但实际上我们使用的时候,一般不会弄些奇怪的表去坑自己,所以两个可以随便用。只是在一些有隐藏行的,或者表的内容参齐不齐的,注意选择合适的就可以了。
至于获取最大列号,建议大家自己去试试。
四、本期宏完整展示
Sub firstblood() For Each s In Worksheets rmax = [A65535].End(xlUp).Row() Cells(rmax + 1, 1).Value = s.Name NextEnd SubSub Maxline() rmax1 = [A65535].End(xlUp).Row() rmax2 = [A1].CurrentRegion.Rows.Count() MsgBox "最大行号为:" & Chr(10) & rmax1 & " " & rmax2End Sub
五、后话
关注我的频道,方便找到对应的 视频版 链接以及更新内容。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。