VBA中如何让Sheet1的LastRow动态更新以获取最新最后一行?
解决VBA中动态获取工作表最新最后一行的问题
嘿,我明白你的需求啦——你一开始获取了Sheet1和Sheet2的最后一行,但执行复制粘贴后,1LastRow还是停留在原来的数值,没办法自动更新成Sheet1的最新行数。这其实是因为变量赋值后不会自动跟着工作表变化,得我们手动重新计算才行,下面给你两种简单的解决办法:
方法1:复制粘贴后重新赋值
最直接的方式就是在完成粘贴操作后,重新执行一遍获取最后一行的代码,覆盖原来的1LastRow值:
Sub UpdateLastRowAfterPaste() Dim lastRowSheet1 As Long ' 建议变量名不要以数字开头,更规范易读 Dim lastRowSheet2 As Long ' 初始获取两行的最后一行 lastRowSheet1 = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row lastRowSheet2 = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row ' 执行你的复制粘贴操作 Sheets("Sheet2").Range("B2:B" & lastRowSheet2).Copy Sheets("Sheet1").Range("D2").PasteSpecial xlPasteValues ' 这里可根据需求调整粘贴类型 ' 关键一步:粘贴完成后,重新获取Sheet1的最新最后一行 lastRowSheet1 = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row ' 测试一下,看看更新后的数值 Debug.Print "Sheet1最新最后一行:" & lastRowSheet1 End Sub
方法2:封装成自定义函数(推荐)
如果你的代码里需要多次获取最后一行,把这个逻辑封装成函数会更高效,避免重复写相同的代码:
' 自定义函数:传入工作表和列号(默认第1列),返回该列的最后一行 Function GetLastRow(ByVal targetSheet As Worksheet, Optional ByVal targetCol As Long = 1) As Long GetLastRow = targetSheet.Cells(targetSheet.Rows.Count, targetCol).End(xlUp).Row End Function Sub UseCustomFunction() Dim lastRowSheet1 As Long Dim lastRowSheet2 As Long ' 初始调用函数获取最后一行 lastRowSheet1 = GetLastRow(Sheets("Sheet1")) lastRowSheet2 = GetLastRow(Sheets("Sheet2")) ' 执行复制粘贴 Sheets("Sheet2").Range("B2:B" & lastRowSheet2).Copy Sheets("Sheet1").Range("D2").PasteSpecial xlPasteValues ' 再次调用函数更新Sheet1的最后一行 lastRowSheet1 = GetLastRow(Sheets("Sheet1")) MsgBox "Sheet1现在的最后一行是:" & lastRowSheet1 End Sub
小提示
VBA的变量命名规范里,不建议用数字开头(比如1LastRow),虽然能运行,但可读性差,改成lastRowSheet1这种描述性的名字会更清晰哦!
内容的提问来源于stack exchange,提问作者MarioS
相关产品推荐
相关产品推荐

