Excel VBA运行时错误13:类型不匹配问题求助(附代码)
解决VBA Run-time error 13: Type mismatch(类型不匹配)错误
我来帮你快速定位并解决这个问题,你的代码里的错误其实很典型,一眼就能揪出来:
错误根源
你已经通过For Each CoSheet In Workbooks(ListBoxWbk.Value).Worksheets把CoSheet声明为Worksheet对象了,但后面却写了Workbooks(ListBoxWbk.Value).Sheets(CoSheet)——Sheets集合的参数只能接受工作表名称(字符串)或者索引数字,直接传入Worksheet对象就会触发「类型不匹配」错误。
修复方案(两种可选,推荐第一种)
方案1:直接使用已获取的Worksheet对象(最简洁高效)
既然已经拿到了CoSheet这个工作表对象,直接用它操作单元格就行,不用再绕回Sheets集合:
Dim C As Integer, CoSheet As Worksheet Dim targetWs As Worksheet Set targetWs = Sheet2 ' 提前定义目标工作表,提升可读性和效率 For Each CoSheet In Workbooks(ListBoxWbk.Value).Worksheets For C = 1 To 10 ' 先找到目标行,避免重复调用End(xlUp) Dim targetRow As Long targetRow = targetWs.Range("A1048573").End(xlUp).Offset(1, 0).Row targetWs.Cells(targetRow, "A").Value = CoSheet.Cells(1, 15) & "-1" targetWs.Cells(targetRow, "B").Value = CoSheet.Cells(C, 2) ' 后面的C列同理,直接用CoSheet.Cells(...)即可 Next C Next CoSheet
方案2:传入工作表名称到Sheets集合
如果你非要通过Sheets集合调用,就传入CoSheet.Name(工作表名称字符串):
' 错误行修改为: Sheet2.Range("A1048573").End(xlUp).Offset(1, 0).Value = Workbooks(ListBoxWbk.Value).Sheets(CoSheet.Name).Cells(1, 15) & "-1"
额外优化建议
- 提前定义目标工作表(比如
targetWs),避免重复调用Sheet2,代码更清晰且运行更快 - 把
targetRow提取出来,不用每次都执行Range("A1048573").End(xlUp).Offset(1, 0),减少重复计算 - 尽量用
Long类型存储行号(因为Excel行号超过Integer的最大值32767时会出错)
内容的提问来源于stack exchange,提问作者Tyler




