我有一张工作表,在sheet1的单元格中调用了一个函数。 当我更改为sheet2,编辑一些内容并返回到sheet1时,我看到值更改(因为我使用ActiveWorkbook和ActiveSheet)。如果我在sheet1中做了某些事情,那么值就会回来。
我也可以拥有多个具有相同数据的工作簿...
编辑:我忘了指定工作簿的名称和工作表不是静态的,都是动态的。
编辑2:我认为Excel在编辑工作表并执行VBA代码时会刷新所有工作表,但是活动工作表不是Sheet1,其中数据是......所以,VBA代码在错误的工作表中运行。 / p>
编辑3:工作表具有"计算选项"到"自动"我的Excel页面底部有一个按钮"计算"强制刷新所有公式和VBA代码。
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
如何仅在活动工作表上而不是在所有工作表上执行代码?
或者最好的方法是什么?
感谢您的帮助。
答案 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 ..."
的子函数我的公式构建起来不那么简单,但它适用于包含公式的工作表......
感谢您的帮助