带合并单元格的区域间复制问题求助
解决VBA类型不匹配与引用错误问题
嘿,我仔细看了你的代码,完全能理解查了好几个小时资料还卡壳的烦躁——咱们直接揪出问题根源,一步步修正:
核心问题分析
你遇到的「类型不匹配」错误主要来自这几个不当引用:
- 错误调用Workbooks集合:
Workbooks(dest)和Workbooks(src)是错的——Workbooks()需要传入工作簿名称(字符串)或索引数字,但你已经把dest和src定义成了Workbook对象,直接用对象本身即可,不用再套Workbooks()。 - Cells未指定父工作表:
Cells(9, i)和Cells(7, icount)没有明确归属的工作表,VBA会默认用当前激活的工作表,这很容易导致跨工作表引用时的混乱。 - 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
相关产品推荐
相关产品推荐

