Excel如何使用VBA操作引用其它工作簿中的单元格

发布时间:2025-05-16 16:06

版权声明:

本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议》和 《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

一个工作薄的工作表的单元格可以使用公式直接引用另一个工作簿的工作表的单元格的值,自然,被引用的工作表的单元格的值更新后,打开引用了此工作表的工作簿后,其值也会自动更新。

如以下路径“F:\工作簿间数据引用”,有两个文件夹:

现打开3个工作簿:

其中“F:\工作簿间数据引用\a\a.xlsx”的Sheet1的内容如下:

a

b

c

m1

1

2

3

m2

4

5

6

m3

77

8

9

其中“F:\工作簿间数据引用\b\b.xlsx”的Sheet1的内容如下:

a

b

c

m1

11

12

13

m2

14

15

16

m3

17

18

19

其中“F:\工作簿间数据引用\c.xlsx”的Sheet1使用公式引用其它工作簿中单元格的数据:

n

sum

a

=SUM([a.xlsx]Sheet1!B2:B4)

b

=SUM([b.xlsx]Sheet1!C2:C4)

注意其语法规则。

此时关闭工作簿a、b,工作簿C的工作表Sheet1的公式的引用会将公式引用工作簿的绝对路径显示出来:

n

sum

a

=SUM('F:\工作簿间数据引用\a[a.xlsx]Sheet1'!B2:B4)

b

=SUM('F:\工作簿间数据引用\b[b.xlsx]Sheet1'!C2:C4)

试图将上面的绝对路径改为相对路径:

n

sum

a

=SUM('..\a[a.xlsx]Sheet1'!B2:B4)

b

=SUM('[b.xlsx]Sheet1'!C2:C4)

结果如下:

n

sum

a

=SUM('C:\Users\ww\a[a.xlsx]Sheet1'!B2:B4)

b

=SUM('F:\工作簿间数据引用\b[b.xlsx]Sheet1'!C2:C4)

可以知道,工作簿之间的数据引用,只能使用绝对路径。

除非工作盘下的文件夹整体移动到其它工作盘,否则文件夹或文件的移动,打开工作簿C.xlsx时,会提示以下错误:

原因是绝对路径错误(工作盘盘符可以自动改变)。

同样的,引用未打开的工作簿的数据,我们也可以使用VBA代码。

从上面可知,对于引用其它打开的工作簿,公式引用时切换工作簿即可。在VBA代码中,可以用VBA代码打开其它工作簿,并引用对象,所以我们引用未打开的工作簿,可以将指定的工作簿以只读方式打开,获取数据后又将其关闭。将屏幕更新属性值设置为False,用户看不到打开工作簿的过程。也可以不打开工作簿,使用公式,将路径按既定的语法规则写清楚或定义一个函数。实现这种方法的VBA 代码如下:
//代码效果参考:http://www.zidongmutanji.com/zsjx/145973.html

Sub 获取其他工作簿数据()
Dim wb As Workbook
'以只读方式打开工作簿
Set wb = Workbooks.Open("F:\工作簿间数据引用\a\a.xlsx", True, True)
With ThisWorkbook.Worksheets("Sheet1") '从工作簿中读取数据
' 方式1,从打开的工作簿引用
.Range("B2") = wb.Worksheets("Sheet1").Range("B2") +
wb.Worksheets("Sheet1").Range("B3") +
wb.Worksheets("Sheet1").Range("B4")
' 方式2,使用公式和绝对路径
.Range("B3").Formula = "=SUM('F:\工作簿间数据引用\b[b.xlsx]Sheet1'!C2:C4)"
' 方式3,将方式2的使用定义为一个函数
.Range("B4").Formula = GetClosedData("F:\工作簿间数据引用\b", "b.xlsx", "Sheet1", "D2:D4")
End With
wb.Close False '关闭打开的工作簿且不保存任何变化
Set wb = Nothing '释放内存
End Sub

Function GetClosedData(ByVal path As String, ByVal WorkbookName As String, _
ByVal SheetName As String, ByVal RangeName As String)
'参数Path 为工作簿路径
'参数WorkbookName 为工作簿名称
'参数SheetName 为工作表名称
'参数RangeName 为单元格区域
Dim r
r = "=sum('" & path & "[" & WorkbookName & "]"
r = r & SheetName & "'!" & RangeName & ")"
GetClosedData = r
End Function

网址:Excel如何使用VBA操作引用其它工作簿中的单元格 https://m.mxgxt.com/news/view/1231272

相关内容

让Excel中的图表自动转化为PPT,你会用VBA来实现这个动作吗
txt转Excel工具绿色版
Excel怎么设置密码?这4个方法必须掌握!
excel怎么删除空白行,海尔空调价格表大全?
怎么在excel中制作三角图
如何在同一Excel图表工作表中显示多个图表?
如何利用Excel表格制作Gantt图,让项目管理更高效?
如何用Excel制作组合图,这篇实例详解教程一定要看!
超实用Excel技巧!在Excel中输入 “=”居然有这些神奇的作用!
excel表格如何做xy轴图表

随便看看