定义每周增长工作表的最后行数值并在Range对象中使用
解决VBA AutoFill动态行号问题
核心问题修正
你之前的代码出错主要是两个点:
- 数字类型变量(比如行号)不需要用
Set赋值,Set是给对象(比如Range)用的 SpecialCells(xlLastCell)可能因为工作表历史操作残留错误的行号,不如直接从数据列的底部往上找真实的最后一行更可靠
最简单的实现步骤
1. 定义并获取真实最后一行行号
在你的宏开头添加这段代码(假设A列是数据的第一列,每行都有内容不会为空,如果不是就把"A"换成你确定有完整数据的列号):
' 定义存储最后一行行号的变量 Dim lastRow As Long ' 从A列最底部往上找第一个有数据的行,获取行号 lastRow = Cells(Rows.Count, "A").End(xlUp).Row
2. 替换AutoFill里的固定行号
把你原来的固定行号代码,比如:
Selection.AutoFill Destination:=Range("J2:J176413")
改成用变量拼接的形式:
' 注意这里用 & 把字符串和变量拼接起来 Selection.AutoFill Destination:=Range("J2:J" & lastRow)
为什么这个方法好用
- 只会获取真实有数据的最后一行,不会生成空白行拖慢工作表
- 每周新增数据后,宏会自动识别新的最后一行,不用手动改行号
你之前错误代码的问题说明
Set LastRowChecker = ...:LastRowChecker是Long类型(存数字),不需要用Set,直接写LastRowChecker = Range("A1").SpecialCells(xlLastCell).Row就行,但这个方法不如End(xlUp)可靠MsgBox LastRowValue:LastRowValue你定义成了Range对象,MsgBox不能直接显示Range,要显示行号应该用MsgBox LastRowChecker
内容的提问来源于stack exchange,提问作者Demethostes90
相关产品推荐
相关产品推荐

