如何使VBA函数调用其所在工作表的数据而非当前激活表?
让VBA函数仅调用所在工作表的数据
嘿,这个问题我之前处理过,核心问题就出在你原来的函数里Cells(1,1)和Cells(1,2)默认会指向当前活动的工作表——也就是你执行刷新操作时的工作表A,所以B表的函数才会“跑错地方”读A表的数据。咱们把函数改一下,让它明确锁定自己所在的工作表就行,给你两种实用方法:
方法一:灵活适配任意工作表(推荐)
用Application.Caller来获取调用函数的单元格所属的工作表,这样不管你把函数放到哪个工作表,它都会自动读取当前表的数据:
Function Sums() Dim targetSheet As Worksheet ' 获取函数所在的工作表对象 Set targetSheet = Application.Caller.Parent ' 引用该工作表的A1和B1单元格求和 Sums = targetSheet.Cells(1, 1) + targetSheet.Cells(1, 2) End Function
简单说,Application.Caller就是调用这个函数的那个单元格,.Parent就是这个单元格所在的工作表,完美解决跨表引用的问题。
方法二:固定指定某张工作表(适合场景单一的情况)
如果你的函数只打算在工作表B里用,也可以直接硬指定工作表名称,这样函数只会读取B表的数据:
Function Sums() ' 直接锁定工作表B Sums = ThisWorkbook.Worksheets("B").Cells(1, 1) + ThisWorkbook.Worksheets("B").Cells(1, 2) End Function
不过这种方法灵活性差,要是以后想把函数用到其他工作表,就得手动改工作表名称,所以更推荐第一种方法。
最后一步:生效验证
修改完函数后,回到工作表B,选中用了Sums()的单元格,按F2再回车刷新公式。之后不管你在工作表A执行多少次刷新,B表的函数都只会老老实实读取自己表的A1和B1数据啦!
内容的提问来源于stack exchange,提问作者Avery Torrance
相关产品推荐
相关产品推荐

