You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Excel VBA运行时错误13:类型不匹配问题求助(附代码)

解决VBA Run-time error 13: Type mismatch(类型不匹配)错误

我来帮你快速定位并解决这个问题,你的代码里的错误其实很典型,一眼就能揪出来:

错误根源

你已经通过For Each CoSheet In Workbooks(ListBoxWbk.Value).WorksheetsCoSheet声明为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

火山引擎 最新活动