【问题标题】:Excel UDF with two workbooks open打开两个工作簿的 Excel UDF
【发布时间】:2020-10-12 14:06:28
【问题描述】:

我正在使用一个简单的 excel UDF 来评估一个字符串作为一个公式。

Function Eval(Ref As String)
           
    Application.Volatile
    Eval = Evaluate(Ref)
        
End Function

字符串存储在由会计维护的数据表中,我正在使用 power query 将其放入边距表中。我的问题是用户有可能同时打开多个工作簿。有没有办法阻止它尝试根据另一张表重新计算?

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

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

【问题讨论】:

  • 如果您从单元格中调用它,请尝试Eval = Application.ThisCell.Parent.Evaluate(Ref)
  • @BigBen - 这行得通。谢谢。
  • @BigBen:超级有趣……我对ThisCell一无所知。我一直在使用:Eval = Application.Caller.Parent.Evaluate(Ref).
  • @FaneDuru - 是的,Application.Caller 是另一种方法
  • @BigBen:我只是想强调一下,我从来没有听说过ThisCell,能够在这种情况下使用......这并不意味着没有很多其他Excel问题我从来没有听说过。 :)

标签: excel vba user-defined-functions


【解决方案1】:

如果要引用特定工作簿,可以在引用本身中这样做:

Ref = "[WorkbookFileName.xlsm]" & Ref

或者对于当前工作簿(这将解析为当前正在执行的宏的工作簿):

Ref = "[" & ThisWorkbook.Name & "]" & Ref

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

Ref = "SheetName!" & Ref

或者

Ref = "[WorkbookFileName.xlsm]SheetName!" & Ref

然后你就可以执行Eval了。

【讨论】:

    【解决方案2】:

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

    您可以通过Application.ThisCell.Parent 获得对该工作表的引用:

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

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多