当前位置:   article > 正文

tstringgrid 单元格区域获取_零基础学Excel VBA-WE002 【VBA获取最大行列号,让代码更智能】...

sheets("sheet1").[a65535].end(xlup).row

一、简单演示

eed194e86870a134921a3f98cc61a076.gif

二、新对象/方法的介绍

1. [] / Range / Cells

代表一个单元格或单元格区域,这是非常基本、用法也非常多的对象。

我们看一个汇总说明。

fe823daaf430561cee933f34a525e05a.png

对固定单元格和固定范围的表示,用 [] 是最简单也最直观的,用 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 显示结果。

建议看 视频版,获取运行结果。

ad405ca1b0dd7b8a2e924b3705da7c97.png

结果分别是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

五、后话

关注我的频道,方便找到对应的 视频版 链接以及更新内容。

e9d713a88effc4eb62aafd5c5ed220a7.png
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/170494
推荐阅读
相关标签
  

闽ICP备14008679号