一个工作薄的工作表的单元格可以使用公式直接引用另一个工作簿的工作表的单元格的值,自然,被引用的工作表的单元格的值更新后,打开引用了此工作表的工作簿后,其值也会自动更新。
如以下路径“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的内容如下:
11
12
13
14
15
16
17
18
19
其中“F:\工作簿间数据引用\c.xlsx”的Sheet1使用公式引用其它工作簿中单元格的数据:
n
sum
=SUM([a.xlsx]Sheet1!$B$2:$B$4)
=SUM([b.xlsx]Sheet1!$C$2:$C$4)
注意其语法规则。
此时关闭工作簿a、b,工作簿C的工作表Sheet1的公式的引用会将公式引用工作簿的绝对路径显示出来:
=SUM('F:\工作簿间数据引用\a\[a.xlsx]Sheet1'!$B$2:$B$4)
=SUM('F:\工作簿间数据引用\b\[b.xlsx]Sheet1'!$C$2:$C$4)
试图将上面的绝对路径改为相对路径:
=SUM('..\a\[a.xlsx]Sheet1'!$B$2:$B$4)
=SUM('[b.xlsx]Sheet1'!$C$2:$C$4)
结果如下:
=SUM('C:\Users\ww\a\[a.xlsx]Sheet1'!$B$2:$B$4)
可以知道,工作簿之间的数据引用,只能使用绝对路径。
除非工作盘下的文件夹整体移动到其它工作盘,否则文件夹或文件的移动,打开工作簿C.xlsx时,会提示以下错误:
原因是绝对路径错误(工作盘盘符可以自动改变)。
同样的,引用未打开的工作簿的数据,我们也可以使用VBA代码。
从上面可知,对于引用其它打开的工作簿,公式引用时切换工作簿即可。在VBA代码中,可以用VBA代码打开其它工作簿,并引用对象,所以我们引用未打开的工作簿,可以将指定的工作簿以只读方式打开,获取数据后又将其关闭。将屏幕更新属性值设置为False,用户看不到打开工作簿的过程。也可以不打开工作簿,使用公式,将路径按既定的语法规则写清楚或定义一个函数。实现这种方法的VBA代码如下:
ref
吴永佩成丽君《征服ExcelVBA:让你工作效率倍增的239个实用技巧》