Excel VBA:如何将代码执行限制在工作表中
Posted
技术标签:
【中文标题】Excel VBA:如何将代码执行限制在工作表中【英文标题】:Excel VBA: how can I restrict code execution to the sheet 【发布时间】:2017-12-19 14:19:46 【问题描述】:我有一张在 sheet1 的单元格中调用的函数的工作表。 当我更改为 sheet2,编辑某些内容并返回 sheet1 时,我看到值更改(因为我使用 ActiveWorkbook 和 ActiveSheet)。如果我在 sheet1 中做某事,价值就会回来。
我也可以拥有多个具有相同数据的工作簿...
编辑:我忘了指定工作簿的名称,工作表不是静态的,都是动态的。
编辑 2:我认为 Excel 在编辑工作表并执行 VBA 代码时会刷新所有工作表,但活动表不是数据所在的 Sheet1 ...因此,VBA 代码在错误的工作表中运行。
编辑 3:工作表将“计算选项”改为“自动”,我的 Excel 页面底部有一个按钮“计算”,用于强制刷新所有公式和 VBA 代码。
Excel 单元格内容:
=IF(BD66;MainFunction(BJ66);"")
主要功能:
Function MainFunction(var)
MainFunction = (var * Test()) / (...)
End Function
子函数用于多个函数:
Private Function Test()
Test = ActiveWorkbook.ActiveSheet.Range("BE50")
End Function
如何只在活动工作表上而不是在所有工作表上执行代码?
或者最好的方法是什么?
感谢您的帮助。
【问题讨论】:
您的问题对我来说不是很清楚,但您可以根据您的使用情况,使用 Worksheets("Sheet1") 或 Sheets("Sheet1") 来专门定位工作表,无论是否指定 ActiveWorkbook。 你是对的,但我忘了指定工作表的名称和工作簿是动态的。对不起... 您可以发布您尝试调用的实际代码和函数吗?即使它们是动态的,您只希望它们在您所在的当前工作表上工作,因此ActiveSheet.Range
应该可以正常工作,因为它只在该工作表上。没有看到你的手机信息/真实代码,我不确定我能得到多少帮助。
@Busse :我在帖子中添加了信息。确实,只有 sheet1 是更新的,是的。但是,该函数检索错误的数据。如果我编辑 sheet2,ActiveSheet 是 Sheet2 而不是 Sheet1。所以,当我回到 Sheet1 时,我有“#VALUE!”,因为 VBA 函数与 Sheet2 作为 ActiveSheet 一起运行......我只想在当前工作表上而不是在所有工作表或工作簿上运行 VBA 代码。如果我能做到这一点,它会救我。
【参考方案1】:
据我所知 - 您的 Test 函数总是查看活动表而不是包含 =IF(BD66;MainFunction(BJ66);"")
公式的工作表,从而导致问题。
要查看此表,您需要查看使用 Application.Caller
调用函数的单元格:
Public Function MainFunction(Target As Range) As Double
MainFunction = Target * Test(Application.Caller)
End Function
Private Function Test(Target As Range) As Double
Test = Target.Parent.Range("BE50")
End Function
我已将 var
更新为 Target
,因为这是我在工作表事件中经常看到的内容。
【讨论】:
你说得对,是我的问题!但你的解决方案在我的情况下不起作用。【参考方案2】:我找到了解决问题的方法... 我在主函数中添加参数以替换所有使用“Active...”的子函数
我的公式不太容易构建,但它适用于包含公式的工作表......
感谢您的帮助
【讨论】:
以上是关于Excel VBA:如何将代码执行限制在工作表中的主要内容,如果未能解决你的问题,请参考以下文章
使用Excel VBA,如何将某一个工作表保存到新建的Excel中?