Excel VBA:如何将代码执行限制在工作表中

时间:2017-07-14 13:00:12

标签: excel vba excel-vba excel-2010

我有一张工作表,在sheet1的单元格中调用了一个函数。 当我更改为sheet2,编辑一些内容并返回到sheet1时,我看到值更改(因为我使用ActiveWorkbook和ActiveSheet)。如果我在sheet1中做了某些事情,那么值就会回来。

我也可以拥有多个具有相同数据的工作簿...

编辑:我忘了指定工作簿的名称和工作表不是静态的,都是动态的。

编辑2:我认为Excel在编辑工作表并执行VBA代码时会刷新所有工作表,但是活动工作表不是Sheet1,其中数据是......所以,VBA代码在错误的工作表中运行。 / p>

编辑3:工作表具有"计算选项"到"自动"我的Excel页面底部有一个按钮"计算"强制刷新所有公式和VBA代码。

enter image description here

Excel单元格内容:

=IF(BD66;MainFunction(BJ66);"")

主要功能:

Function MainFunction(var)
    MainFunction = (var * Test()) / (...)
End Function

Sub Function用于多个功能:

Private Function Test()
    Test = ActiveWorkbook.ActiveSheet.Range("BE50")
End Function

如何仅在活动工作表上而不是在所有工作表上执行代码?

或者最好的方法是什么?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

从我所看到的 - 您的测试功能通过始终查看活动表而不是包含=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,因为这是我过去在工作表事件中看到的内容。

答案 1 :(得分:0)

我找到了解决问题的方法...... 我在main函数中添加参数来替换所有使用" Active ..."

的子函数

我的公式构建起来不那么简单,但它适用于包含公式的工作表......

感谢您的帮助