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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:54:03