You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:18:25