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

Excel VBA技术求助:复制指定列至另一工作表对应列

问题分析与修正方案

原代码存在的问题

  1. 目标行计算错误:
    你用Sheet2.Rows.Count获取行数,但Sheet2未必对应"ROC Cases"工作表,这会导致目标行计算偏差,应该直接引用目标工作表的总行数来计算。
  2. 尝试代码的目标区域语法错误:
    .Range("C, F:M" & ROCCasesDest)是无效的VBA写法,系统无法识别这种不连续区域的拼接方式,需要正确构造目标区域。

修正后的代码(三种可选方案)

方案1:分区域复制(直观易懂)

Sub Create_ROC_Case_126()
    Dim ROCCasesDest As Long
    ' 正确计算"ROC Cases"的下一个可用行(以B列为基准)
    ROCCasesDest = Worksheets("ROC Cases").Cells(Worksheets("ROC Cases").Rows.Count, "B").End(xlUp).Row + 1
    
    ' 复制C列内容到目标行C列
    Worksheets("Dock Door Status").Range("C8").Copy
    Worksheets("ROC Cases").Range("C" & ROCCasesDest).PasteSpecial Paste:=xlPasteValues
    
    ' 复制F:M列内容到目标行F:M列
    Worksheets("Dock Door Status").Range("F8:M8").Copy
    Worksheets("ROC Cases").Range("F" & ROCCasesDest & ":M" & ROCCasesDest).PasteSpecial Paste:=xlPasteValues
    
    ' 清除剪贴板残留
    Application.CutCopyMode = False
End Sub

方案2:一次性复制不连续区域(高效简洁)

Sub Create_ROC_Case_126()
    Dim ROCCasesDest As Long
    Dim sourceRange As Range
    Dim destRange As Range
    
    ' 计算目标行
    ROCCasesDest = Worksheets("ROC Cases").Cells(Worksheets("ROC Cases").Rows.Count, "B").End(xlUp).Row + 1
    
    ' 组合源区域(C8 + F8:M8)
    Set sourceRange = Union(Worksheets("Dock Door Status").Range("C8"), _
                           Worksheets("Dock Door Status").Range("F8:M8"))
    
    ' 组合目标区域(对应行的C列 + F:M列)
    Set destRange = Union(Worksheets("ROC Cases").Range("C" & ROCCasesDest), _
                         Worksheets("ROC Cases").Range("F" & ROCCasesDest & ":M" & ROCCasesDest))
    
    ' 批量复制值
    sourceRange.Copy
    destRange.PasteSpecial Paste:=xlPasteValues
    
    Application.CutCopyMode = False
End Sub

方案3:跳过剪贴板直接赋值(性能最优)

如果只需要复制单元格值,不需要格式,可以直接赋值,避免剪贴板操作:

Sub Create_ROC_Case_126()
    Dim ROCCasesDest As Long
    
    ROCCasesDest = Worksheets("ROC Cases").Cells(Worksheets("ROC Cases").Rows.Count, "B").End(xlUp).Row + 1
    
    ' 直接赋值C列
    Worksheets("ROC Cases").Range("C" & ROCCasesDest).Value = Worksheets("Dock Door Status").Range("C8").Value
    
    ' 直接赋值F:M列
    Worksheets("ROC Cases").Range("F" & ROCCasesDest & ":M" & ROCCasesDest).Value = _
        Worksheets("Dock Door Status").Range("F8:M8").Value
End Sub

内容的提问来源于stack exchange,提问作者Iron Man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:00:18