为何VBA中Rows.Count相关代码返回单元格值而非实际行数?
问题分析与修复方案
我一眼就揪出问题啦!你的代码里差了一个字母,导致返回的是单元格值而非行数——咱们来一步步解决:
原代码的问题点
你写的Rows.Count, 9).End(xlUp).Rows这里,.Rows是返回当前单元格所在的行对象,MsgBox调用时会自动提取这个对象关联的单元格内容(也就是你I列里的四位编码),而不是我们需要的行号。正确的属性应该是.Row(单数形式),它会直接返回该单元格的行号数值。
修正后的代码
Sub CommandButton1_Click() Dim RowCount As Long ' 建议明确声明变量类型,更规范 RowCount = Worksheets("Down Tracker").Cells(Rows.Count, 9).End(xlUp).Row MsgBox "I列最后一行的行号是:" & RowCount ' 可以加个提示文本,更友好 End Sub
额外说明
- 我加了
Dim RowCount As Long来明确变量类型,这是VBA的最佳实践,避免隐式类型转换可能带来的问题。 - 如果你的I列存在隐藏行、筛选状态,或者需要考虑工作表中所有已使用的最后一行(不仅仅是I列),可以改用这个写法:
不过大多数场景下,RowCount = Worksheets("Down Tracker").Columns(9).SpecialCells(xlCellTypeLastCell).RowEnd(xlUp)的效率和准确性已经足够。
内容的提问来源于stack exchange,提问作者Aaron Atkinson




