同一工作簿中动态列数据复制至另一动态列的VBA报错求助
解决VBA复制动态列到另一工作表的对象错误问题
原代码的核心错误
语法拼写错误
Row.Count应为Rows.Count:VBA中Rows是行集合,Row是单个行对象,调用计数需要用复数形式。targetSheet.Cells(targetSheet, 6)参数错误:Cells方法的参数是行号和列号,不能传入工作表对象,需使用目标行号。End(xlDown)逻辑风险:若目标列(F列)无数据,End(xlDown)会跳到工作表末尾行,导致粘贴位置错误,应改用End(xlUp)反向查找最后一行。
逻辑偏差
原代码仅复制源表A列倒数第二行的单个单元格,未实现"复制整个动态列"的需求。
修正后的代码(复制整列数值)
Sub UpdateCharts() Dim sourceSheet As Worksheet Dim targetSheet As Worksheet Dim sourceLastRow As Long Dim targetNextRow As Long ' 绑定源表和目标表 Set sourceSheet = ThisWorkbook.Worksheets("Inventory Log") Set targetSheet = ThisWorkbook.Worksheets("Tables") ' 获取源表A列最后一行数据的行号 sourceLastRow = sourceSheet.Cells(sourceSheet.Rows.Count, 1).End(xlUp).Row ' 获取目标表F列下一个空行的行号 targetNextRow = targetSheet.Cells(targetSheet.Rows.Count, 6).End(xlUp).Row + 1 ' 复制源表A列所有数据的数值到目标表F列的空行起始位置 sourceSheet.Range("A1:A" & sourceLastRow).Copy targetSheet.Cells(targetNextRow, 6).PasteSpecial Paste:=xlPasteValues ' 清除剪贴板,避免残留提示 Application.CutCopyMode = False End Sub
更高效的优化版本(无需复制粘贴)
直接赋值比Copy/Paste更快,避免剪贴板占用:
Sub UpdateCharts_Enhanced() Dim sourceSheet As Worksheet Dim targetSheet As Worksheet Dim sourceLastRow As Long Dim targetNextRow As Long Dim sourceRange As Range Set sourceSheet = ThisWorkbook.Worksheets("Inventory Log") Set targetSheet = ThisWorkbook.Worksheets("Tables") sourceLastRow = sourceSheet.Cells(sourceSheet.Rows.Count, 1).End(xlUp).Row targetNextRow = targetSheet.Cells(targetSheet.Rows.Count, 6).End(xlUp).Row + 1 ' 定义源数据范围(若要跳过表头,改为A2:A&sourceLastRow) Set sourceRange = sourceSheet.Range("A1:A" & sourceLastRow) ' 直接将数值批量赋值到目标范围 targetSheet.Range(targetSheet.Cells(targetNextRow, 6), targetSheet.Cells(targetNextRow + sourceLastRow - 1, 6)).Value = sourceRange.Value End Sub
额外说明
- 若只需复制数据行(跳过表头),将源范围改为
sourceSheet.Range("A2:A" & sourceLastRow)即可,目标行的赋值范围会自动适配。 - 所有
Rows.Count均绑定对应工作表对象,避免因当前激活表变化导致的错误。
内容的提问来源于stack exchange,提问作者SouthernGentlemen
相关产品推荐
相关产品推荐

