Excel VBA跨表复制转置粘贴触发运行时错误1004问题求解
错误原因分析
- 根本原因是VBA中
Range.Select方法只能对当前处于激活状态的工作表中的单元格生效,如果执行代码时Questions工作表或Apps工作表未被激活,对应行的Select操作就会抛出1004错误。 - 额外说明:原代码使用
Select/Selection的写法属于录制宏产生的冗余风格,既降低执行效率,也极易因为工作表激活状态变化触发异常,实际开发中完全可以省略这类操作。
修正后的可用代码
无需选中任何单元格或工作表,直接完成转置粘贴即可,代码更简洁也不会触发激活状态相关的错误:
Sub CopyPaste() Worksheets("Questions").Range("D3:D40").Copy Worksheets("Apps").Range("C2").PasteSpecial Paste:=xlPasteValues, Transpose:=True Application.CutCopyMode = False End Sub
补充验证:D3:D40共38个单元格,C2:AN2也是38个连续列,范围完全匹配,不会出现内容溢出问题。
如果你一定要保留原代码的选中操作逻辑,需要先激活对应工作表(不推荐该写法),示例如下:
Sub CopyPaste_NotRecommend() Worksheets("Questions").Activate Worksheets("Questions").Range("D3:D40").Select Selection.Copy Worksheets("Apps").Activate Worksheets("Apps").Range("C2").Select Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=True Worksheets("Apps").Range("A1").Select Application.CutCopyMode = False End Sub
内容的提问来源于stack exchange,提问作者sheanshar
相关产品推荐
相关产品推荐

