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中?

Excel VBA 将范围复制到 1,048,576 行后的新工作表

EXCEL VBA 隐藏了工作表,加密的,如何显示或破解

执行VBA代码时工作表抖动的厉害如何避免

访问 VBA 如何将新工作表添加到 Excel?

将 Excel 工作表移至 Microsoft 访问的 Excel-VBA 代码?