You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA批量复制数据至对应工作表报错:类型不匹配

解决VBA「类型不匹配」错误并实现数据复制需求

先给你梳理下原代码里触发「类型不匹配」的核心问题,再给你一套更可靠的实现方案:

原代码的主要问题

  • 变量A被定义为Range类型,但后续代码里把它当成字符串/单元格值来使用(比如InStr(1, Name.Value, A)、Sheets(A)),这直接触发了类型不匹配错误
  • 内层循环遍历整个A列,没有终止条件,效率极低还容易出问题
  • 过度依赖Select和Selection操作,这不仅拖慢代码,还容易因为工作表切换导致意外错误
  • 逻辑混乱:比如A = Cells(I, 1).Copy这种写法完全不符合VBA语法规范

修正后的代码

这个版本会高效地把主表「VARS Info」中对应姓名的B列数据,复制到同名工作表的指定区域,还会自动处理空行和不存在的工作表情况:

Sub ImportInfo()
    Dim wsMain As Worksheet
    Dim targetWs As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim targetLastRow As Long
    Dim currentName As String
    Dim currentValue As String
    
    ' 关闭屏幕更新,提升代码运行速度
    Application.ScreenUpdating = False
    
    ' 设定主工作表
    Set wsMain = ThisWorkbook.Sheets("VARS Info")
    
    ' 获取主表A列最后一行行号
    lastRow = wsMain.Cells(wsMain.Rows.Count, "A").End(xlUp).Row
    
    ' 遍历主表从第2行开始的所有数据行
    For i = 2 To lastRow
        ' 获取当前行的姓名和对应值
        currentName = wsMain.Cells(i, "A").Value
        currentValue = wsMain.Cells(i, "B").Value
        
        ' 跳过空姓名行
        If currentName = "" Then GoTo NextRow
        
        ' 检查同名工作表是否存在
        On Error Resume Next
        Set targetWs = ThisWorkbook.Sheets(currentName)
        On Error GoTo 0
        
        ' 如果工作表存在,就复制数据
        If Not targetWs Is Nothing Then
            ' 找到目标工作表B列最后一行,准备插入新数据
            targetLastRow = targetWs.Cells(targetWs.Rows.Count, "B").End(xlUp).Row + 1
            ' 把值写入目标工作表,避免使用Select/Selection
            targetWs.Cells(targetLastRow, "B").Value = currentName
            targetWs.Cells(targetLastRow, "C").Value = currentValue
        Else
            ' 如果工作表不存在,弹出提示(可选)
            MsgBox "工作表「" & currentName & "」不存在,跳过该行数据"
        End If
        
NextRow:
    Next i
    
    ' 给主表自动调整列宽
    wsMain.Cells.EntireColumn.AutoFit
    
    ' 恢复屏幕更新
    Application.ScreenUpdating = True
End Sub

代码说明

  • 用wsMain和targetWs直接引用工作表,彻底抛弃Select操作,避免切换工作表带来的错误
  • 先检查目标工作表是否存在,防止因工作表缺失导致代码崩溃
  • 遍历主表时只处理有数据的行,跳过空行
  • 直接通过单元格赋值的方式写入数据,比复制粘贴更高效
  • 最后自动调整主表的列宽,符合你的需求

测试数据适配

针对你提供的测试数据:

A B
Joe Bloggs £100
Dave Smith £100
Joe Bloggs £100
Dave Smith £100

运行代码后,「Joe Bloggs」工作表的B、C列会新增两行对应数据,「Dave Smith」工作表同理,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者Tom Eggins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:25:18