Excel VBA匹配surveyor字符串跨工作簿复制数据报错求助
问题核心错误点
- 变量类型不匹配:声明
y为Workbook类型,但实际赋值的是工作表对象,类型完全不对应 ActiveWorkbook指向错误:执行Workbooks.Open(sPath)打开csv文件后,当前激活的工作簿已经变成刚打开的Survey_form.csv,不是你原本运行宏的目标工作簿,自然找不到名为Frontsheet的工作表,触发下标越界- 拼写错误:
Rage是Range的笔误 - 语法错误:
If条件和Then分两行写不符合VBA语法规则 - 逻辑错误:原代码错误将B列的值修改为"A"&i的字符串,且复制粘贴逻辑冗余,完全不需要用粘贴操作
修复后的完整代码
Sub FrontsheetAdd3() Dim srcWb As Workbook, targetWs As Worksheet Dim sPath As String Dim i As Long ' 源文件路径:宏所在工作簿同路径下的Survey_form.csv sPath = ThisWorkbook.Path & "\Survey_form.csv" Set srcWb = Workbooks.Open(sPath) ' 目标工作表是宏所在工作簿的Frontsheet表,直接用ThisWorkbook避免指向错误 Set targetWs = ThisWorkbook.Sheets("Frontsheet") ' 遍历前40行A列匹配关键词 For i = 1 To 40 If srcWb.Sheets(1).Range("A" & i).Value = "surveyor" Then ' 直接赋值,不需要复制粘贴 targetWs.Range("D34").Value = srcWb.Sheets(1).Range("B" & i).Value ' 匹配到第一个就退出循环,不需要继续遍历,要匹配最后一个就删掉这行 Exit For End If Next i ' 关闭打开的csv文件,不保存改动 srcWb.Close SaveChanges:=False End Sub
额外说明
- csv文件打开后默认只有1个工作表,不需要按名称"Survey_form"调用,直接用
Sheets(1)更稳定,避免csv文件名和工作表名不一致的问题 - 如果你需要匹配A列最后一个出现的surveyor对应的值,删掉代码中的
Exit For即可 - 直接赋值比复制粘贴的执行效率更高,也不会触发剪贴板相关的问题
内容的提问来源于stack exchange,提问作者Geographos
相关产品推荐
相关产品推荐

