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

带合并单元格的区域间复制问题求助

解决VBA类型不匹配与引用错误问题

嘿,我仔细看了你的代码,完全能理解查了好几个小时资料还卡壳的烦躁——咱们直接揪出问题根源,一步步修正:

核心问题分析

你遇到的「类型不匹配」错误主要来自这几个不当引用:

  1. 错误调用Workbooks集合:Workbooks(dest)和Workbooks(src)是错的——Workbooks()需要传入工作簿名称(字符串)或索引数字,但你已经把dest和src定义成了Workbook对象,直接用对象本身即可,不用再套Workbooks()。
  2. Cells未指定父工作表:Cells(9, i)和Cells(7, icount)没有明确归属的工作表,VBA会默认用当前激活的工作表,这很容易导致跨工作表引用时的混乱。
  3. ActiveSheet赋值错误:Set wsTo = dest.Worksheets(ActiveSheet)里,Worksheets()的参数应该是名称/索引,而ActiveSheet是对象,直接用dest.ActiveSheet就行。

修正后的代码

Sub Test()
    Dim i As Long, icount As Long
    Dim wsTo As Worksheet, wsFrom As Worksheet
    Dim src As Workbook, dest As Workbook
    
    Set src = Workbooks.Open("C:\Users\...") ' 替换为你的实际文件路径
    Set dest = ThisWorkbook
    Set wsFrom = src.Worksheets("Interview Vorlage")
    Set wsTo = dest.ActiveSheet ' 直接引用目标工作簿的激活工作表
    
    icount = 14
    For i = 14 To 369 Step 4
        ' 明确指定Cells的父工作表,直接用对象引用赋值
        wsTo.Cells(9, i).Value = wsFrom.Cells(7, icount).Value
        icount = icount + 1
    Next i
    
    src.Close False
    Set src = Nothing
    Set wsFrom = Nothing
    Set wsTo = Nothing
    Set dest = Nothing ' 可选:手动释放所有对象变量
End Sub

用Copy方法实现的替代方案

如果你想用.Copy方法(比如需要复制格式、公式等完整内容),可以把循环里的赋值语句替换成:

wsFrom.Cells(7, icount).Copy Destination:=wsTo.Cells(9, i)

这样会把源单元格的所有内容(值、格式、公式、批注等)复制到目标单元格,比单纯赋值更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:52:44