打开两个工作簿的Excel自定义项

打开两个工作簿的Excel自定义项,excel,vba,user-defined-functions,Excel,Vba,User Defined Functions,我使用一个简单的excel自定义项将字符串作为公式计算 Function Eval(Ref As String) Application.Volatile Eval = Evaluate(Ref) End Function 字符串存储在会计部维护的数据表中,我正在使用power query将其放入页边距表中。我的问题是,用户可能同时打开多个工作簿。有没有办法防止它尝试根据另一张表重新计算 我想得越多,我就越意识到我应该让他们将公式存储为

我使用一个简单的excel自定义项将字符串作为公式计算

Function Eval(Ref As String)
           
    Application.Volatile
    Eval = Evaluate(Ref)
        
End Function
字符串存储在会计部维护的数据表中,我正在使用power query将其放入页边距表中。我的问题是,用户可能同时打开多个工作簿。有没有办法防止它尝试根据另一张表重新计算

我想得越多,我就越意识到我应该让他们将公式存储为公式,并使用“显示公式”按钮


但是我还是很想知道我的问题是否有答案。

如果您想引用特定的工作簿,可以在引用中这样做:

Ref = "[WorkbookFileName.xlsm]" & Ref
或对于当前工作簿(这将解析为当前正在执行的宏的工作簿):

您也可以参考特定的工作表:

Ref = "SheetName!" & Ref


然后可以执行评估。

您希望在调用函数的工作表的上下文中执行
评估

您可以使用
应用程序.ThisCell.Parent
获取对该工作表的引用:

Eval = Application.ThisCell.Parent.Evaluate(Ref)

如果您是从一个单元格中调用此函数,请尝试
Eval=Application.ThisCell.Parent.Evaluate(Ref)
@BigBen-这很有效。谢谢。@BigBen:太有趣了。。。我对这个单元格一无所知。我一直在使用:
Eval=Application.Caller.Parent.Evaluate(Ref)
@FaneDuru-yes,
Application.Caller
是另一个approach@BigBen:我只是想强调一下,我从来没有听说过在这种情况下可以使用的
ThisCell
。。。这并不意味着我没有听说过很多其他Excel问题。:)
Ref = "[WorkbookFileName.xlsm]SheetName!" & Ref
Eval = Application.ThisCell.Parent.Evaluate(Ref)