Excel VBA技术求助:复制指定列至另一工作表对应列
问题分析与修正方案
原代码存在的问题
- 目标行计算错误:
你用Sheet2.Rows.Count获取行数,但Sheet2未必对应"ROC Cases"工作表,这会导致目标行计算偏差,应该直接引用目标工作表的总行数来计算。 - 尝试代码的目标区域语法错误:
.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
相关产品推荐
相关产品推荐

