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

同一工作簿中动态列数据复制至另一动态列的VBA报错求助

解决VBA复制动态列到另一工作表的对象错误问题

原代码的核心错误

  1. 语法拼写错误

    • Row.Count 应为 Rows.Count:VBA中Rows是行集合,Row是单个行对象,调用计数需要用复数形式。
    • targetSheet.Cells(targetSheet, 6) 参数错误:Cells方法的参数是行号和列号,不能传入工作表对象,需使用目标行号。
    • End(xlDown) 逻辑风险:若目标列(F列)无数据,End(xlDown)会跳到工作表末尾行,导致粘贴位置错误,应改用End(xlUp)反向查找最后一行。
  2. 逻辑偏差
    原代码仅复制源表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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:51:32