VBA复制粘贴运行报错:Run-time error 13类型不匹配排查求助
解决VBA Run-time Error 13(类型不匹配)问题
我来帮你搞定这个烦人的类型不匹配错误!先明确你的需求:
- 把Sheet7第1行A-F列的内容,复制到Sheet6前12行、从E列开始的对应区域(也就是E1:J12,刚好12行6列,匹配Sheet7的1行6列数据)
- 把Sheet7第1行G-R列的12个单元格内容,转置后粘贴到Sheet6的Q1:Q12
修正后的完整代码
Sub CopyAndTransposeData() Dim wsSource As Worksheet Dim wsTarget As Worksheet ' 明确绑定工作表,避免因ActiveSheet或名称歧义导致的类型错误 Set wsSource = ThisWorkbook.Worksheets("Sheet7") Set wsTarget = ThisWorkbook.Worksheets("Sheet6") On Error GoTo ErrorHandler ' 启用错误捕获,方便定位问题 ' 第一步:复制Sheet7第1行A-F到Sheet6的E1:J12 wsSource.Range("A1:F1").Copy wsTarget.Range("E1:J12").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ' 第二步:复制Sheet7第1行G-R,转置粘贴到Sheet6 Q1起始位置 wsSource.Range("G1:R1").Copy wsTarget.Range("Q1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True ' 清除复制剪贴板状态,避免弹窗干扰 Application.CutCopyMode = False MsgBox "数据复制转置完成!", vbInformation Exit Sub ErrorHandler: ' 弹窗显示错误详情,方便排查 MsgBox "出错啦:" & Err.Description & vbCrLf & "错误代码:" & Err.Number, vbExclamation Application.CutCopyMode = False End Sub
你之前出错的大概率原因
- 工作表引用不明确:如果直接用
Sheet7但实际工作簿里的工作表名称有拼写错误,或者代码引用指向了图表工作表而非普通工作表,就会触发类型不匹配。上面的代码用ThisWorkbook.Worksheets("Sheet7")明确指定,彻底避免这个问题。 - 目标范围维度不匹配:如果之前尝试直接用
Value赋值(比如wsTarget.Range("E1:E12").Value = wsSource.Range("A1:F1").Value),左边是12行1列,右边是1行6列,数据维度不对就会触发类型错误。用PasteSpecial会让Excel自动处理填充逻辑,不会有这个问题。 - 转置时目标范围指定错误:如果转置时指定了
Q1:Q12而非起始单元格Q1,一旦范围大小和转置内容不匹配,也可能触发错误。
实用调试小技巧
以后再遇到类似问题可以试试这些:
- 用
Debug.Print输出操作的范围地址,比如Debug.Print wsSource.Range("A1:F1").Address,确认是不是你要的区域。 - 在代码开头加上
Option Explicit,强制声明所有变量,避免因变量名拼写错误导致的隐式类型错误。 - 逐行调试时,把鼠标悬停在变量上,查看变量的实际指向(比如
wsSource是不是真的指向Sheet7)。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

