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

如何使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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:46:34