基于另一工作表数据将VBA公式填充至最后一行(不含表头)
问题分析与代码修正
问题根源
现有代码的核心问题是目标填充行计算错误:
- Sheet2含表头共88行,有效数据行数为
88-1=87 - 代码直接用Sheet2的最后行号(88)作为Sheet1的填充结束行,导致Sheet1仅填充到第88行,数据行仅为
88-4+1=85行,和需求的87行差2行 - 同时存在变量定义错误(
LastRow定义为String却未正确使用)、依赖Select/ActiveCell的不规范写法
修正后的代码
Sub AmendRows() Dim ws1 As Worksheet, ws2 As Worksheet Dim ws2LastRow As Long, targetLastRow As Long Application.DisplayAlerts = False Application.ScreenUpdating = False ' 绑定工作表对象(避免依赖选中状态,提升稳定性) Set ws1 = ThisWorkbook.Worksheets("Sheet1") ' 替换为你的Sheet1实际名称 Set ws2 = ThisWorkbook.Worksheets("Sheet2") ' 替换为你的Sheet2实际名称 Locktabs False ' 获取Sheet2最后行号,计算Sheet1需要填充到的目标行号 ws2LastRow = ws2.Range("A" & ws2.Rows.Count).End(xlUp).Row targetLastRow = 3 + (ws2LastRow - 1) ' 3行表头 + Sheet2有效数据行数(排除表头) ' 清理Sheet1旧数据并填充公式 With ws1 .Rows("4:" & .Rows.Count).ClearContents .Rows("4:" & .Rows.Count).ClearFormats .Range("A4:V4").AutoFill Destination:=.Range("A4:V" & targetLastRow) End With Locktabs True ' ThisWorkbook.Worksheets("worksheetmain").Select ' 替换为你的主表实际名称 MsgBox "Rows Amended!" Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
关键修正点
- 目标行精准计算:用
3 + (ws2LastRow - 1)直接得出Sheet1的最终填充结束行,确保3行表头+87行数据,总行数达到90行 - 移除冗余操作:删除没用的
LastRow变量和Select/ActiveCell操作,直接通过工作表对象操作,避免状态依赖错误 - 变量类型修正:用
Long存储行号(行号为数值类型,String会引发潜在计算错误) - 清理范围优化:直接清理第4行及以下的所有内容,确保旧数据完全被覆盖
内容的提问来源于stack exchange,提问作者Mabel
相关产品推荐
相关产品推荐

