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

求助:如何让数组引用其他工作簿数据而非代码所在工作簿

如何让VBA数组引用其他工作簿的数据?

没问题,我来帮你搞定这个——核心就是不要依赖活动工作簿/当前代码所在工作簿,而是明确指定你要读取数据的目标工作簿就行。给你几种实用的方案,按需选择:

方案1:引用已打开的目标工作簿

如果你的目标数据工作簿已经在Excel中打开,直接通过工作簿名称精准引用即可,比ActiveWorkbook稳定得多:

原来的代码可能是这样(依赖活动工作簿):

Dim myArr As Variant
myArr = ActiveWorkbook.Sheets("Sheet1").Range("A1:C10").Value

改成指定目标工作簿(比如目标工作簿叫DataSource.xlsx):

' 先定义并指向目标工作簿
Dim targetWB As Workbook
Set targetWB = Workbooks("DataSource.xlsx")

' 再从目标工作簿的指定工作表读取数组
Dim myArr As Variant
myArr = targetWB.Sheets("Sheet1").Range("A1:C10").Value

注意:工作簿名称要完全匹配,包括后缀(比如.xlsx/.xlsm),如果名称有空格也要完整写上。

方案2:打开未打开的目标工作簿再读取

如果目标工作簿没打开,可以先通过路径打开它,读取数据后还能选择关闭:

Dim targetWB As Workbook
' 替换成你的目标工作簿的实际路径
Set targetWB = Workbooks.Open("C:\YourFiles\DataSource.xlsx")

' 读取数据到数组
Dim myArr As Variant
myArr = targetWB.Sheets("Sheet1").Range("A1:C10").Value

' 如果不需要保持工作簿打开,读取完可以关闭(SaveChanges按需设置)
targetWB.Close SaveChanges:=False

方案3:不打开工作簿直接读取数据(轻量方案)

如果不想打开目标工作簿,也可以用Excel的宏函数直接读取,适合数据量不大的场景:

Dim myArr As Variant
' 格式规则:'文件路径[工作簿名]工作表名'!单元格区域(R1C1格式)
myArr = ExecuteExcel4Macro("'C:\YourFiles\[DataSource.xlsx]Sheet1'!R1C1:R10C3")

额外提醒

  • 路径和文件名一定要准确,带空格的路径必须用单引号包裹
  • 如果目标工作簿有密码保护,需要在Workbooks.Open里添加Password参数
  • 永远优先用明确的工作簿引用,别依赖ActiveWorkbook——用户随时切换工作簿会导致代码出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:03:05