VBA实现从关闭的外部工作簿复制单元格值到当前活动工作簿
错误原因分析
初始版本编译错误原因
ws2被定义为String字符串类型,仅存储了源文件的路径文本,不具备工作簿对象的.Sheets调用能力,因此触发Invalid qualifier错误。- 工作表对象
ws赋值时缺少Set关键字,VBA中对象类型赋值必须使用Set声明。
修改后版本#REF错误+弹窗原因
- 你读取的源文件是CSV格式,CSV为单工作表纯文本文件,不存在多工作表结构,传入的工作表名匹配规则
City*无法匹配到任何有效工作表,因此返回#REF错误。 - 你调用的
CellValClosedWB函数需要传入完全匹配的工作表名,匹配失败时会自动触发手动选择文件的弹窗。
修复方案
推荐使用后台静默打开源文件的方案,不需要依赖第三方自定义函数,逻辑稳定无弹窗,全程用户看不到源文件的打开过程:
Sub FrontsheetAdd_Fixed() Dim wsTarget As Worksheet Dim wbSource As Workbook Dim strSourcePath As String ' 定义目标工作表和源文件路径 Set wsTarget = ActiveWorkbook.Sheets("Frontsheet") strSourcePath = ThisWorkbook.Path & "\Site_survey_form.csv" ' 禁用屏幕更新和弹窗,隐藏后台操作 Application.ScreenUpdating = False Application.DisplayAlerts = False ' 只读模式后台打开源CSV文件 Set wbSource = Workbooks.Open(strSourcePath, ReadOnly:=True) ' 读取对应单元格值写入目标表,CSV默认仅有1个工作表,直接用索引1即可 wsTarget.Range("D28").Value = wbSource.Sheets(1).Range("B17").Value wsTarget.Range("D30").Value = wbSource.Sheets(1).Range("B15").Value ' 关闭源文件,不保存任何修改 wbSource.Close SaveChanges:=False ' 恢复Excel默认设置 Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
注意事项
请确保Site_survey_form.csv文件和当前运行宏的工作簿存放在同一个文件夹下,否则需要将strSourcePath修改为源文件的绝对路径。
内容的提问来源于stack exchange,提问作者Geographos
相关产品推荐
相关产品推荐

