VBA跨工作表拼接列触发运行时错误13类型不匹配如何解决
VBA运行时错误'13'类型不匹配(跨表拼接列)解决办法
错误原因
- 核心错误为
Range参数中错误使用&运算符:&是VBA的字符串拼接运算符,无法用来合并单元格区域对象,两个Range对象直接用&拼接会触发类型不匹配。 - 次要问题:代码中第二个
Range未加.前缀,会默认读取当前活动工作表的区域,而非With语句绑定的sh1,易引发额外报错。 - 潜在风险:未校验
sh4.Range("V4")、sh4.Range("W4")的值是否为合法列号,若单元格内容为非数字,也会触发类型不匹配。
修复代码
如果你的需求是先合并S1表内指定的两列,再复制,修改后代码如下:
Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh4 As Worksheet Dim col1 As Integer, col2 As Integer Dim rng1 As Range, rng2 As Range, mergeRng As Range Set sh1 = ActiveWorkbook.Sheets("S1") Set sh2 = ActiveWorkbook.Sheets("S2") Set sh4 = ActiveWorkbook.Sheets("Comparison") ' 先校验列号是否合法,避免类型错误 If Not IsNumeric(sh4.Range("V4").Value) Or Not IsNumeric(sh4.Range("W4").Value) Then MsgBox "V4或W4单元格不是有效列号,请检查" Exit Sub End If col1 = sh4.Range("V4").Value col2 = sh4.Range("W4").Value If InStr(sh4.Range("F1"), "URS") > 0 Then With sh1 Set rng1 = .Range(.Cells(2, col1), .Cells(2, col1).End(xlDown)) Set rng2 = .Range(.Cells(2, col2), .Cells(2, col2).End(xlDown)) ' 用Union方法合并同工作表的多个单元格区域 Set mergeRng = Union(rng1, rng2) mergeRng.Copy ' 这里可以补充粘贴的目标代码,例:sh4.Range("A1").PasteSpecial Paste:=xlPasteAll End With End If
如果你的需求是拼接S1和S2两个不同工作表的各一列数据,需要分别读取两个表的列数据,再依次粘贴到目标位置,代码示例如下:
' 前面变量定义、列号校验部分和上面一致 If InStr(sh4.Range("F1"), "URS") > 0 Then ' 读取S1的指定列 Set rng1 = sh1.Range(sh1.Cells(2, col1), sh1.Cells(2, col1).End(xlDown)) ' 读取S2的指定列 Set rng2 = sh2.Range(sh2.Cells(2, col2), sh2.Cells(2, col2).End(xlDown)) ' 依次粘贴到Comparison表,示例是粘贴到A列的连续位置 rng1.Copy sh4.Range("A2") rng2.Copy sh4.Range("A" & sh4.Rows.Count).End(xlUp).Offset(1, 0) End If
额外注意事项
- 如果列中有空单元格,
End(xlDown)会停在第一个空单元格位置,若要取整列有效数据,建议改用从下往上定位的写法:.Cells(.Rows.Count, col1).End(xlUp) - 粘贴时如果只需要数值,可以用
PasteSpecial xlPasteValues避免格式干扰
内容的提问来源于stack exchange,提问作者Jayl
相关产品推荐
相关产品推荐

