Excel VBA 从另一个 sheet 计算公式

Excel VBA evaluate formula from another sheet

已解决:问题出在我的公式中,我使用 INDIRECT() 引用单元格,当 sheet 不同时它不起作用。查看答案。

我在一个 sheet 中有一个公式,我想做的是使用另一个 sheet 中的公式,使用 eval 计算公式。然而,结果并不如预期。似乎公式使用 Sheet A 处的值而不是调用者 Sheet B.

sheetA 中的公式(参见:Screenshot Sheet A

=IF(ISERROR(INDEX('1516Activity'!$B:$B,MATCH(INDIRECT(ADDRESS(ROW(),COLUMN(D:D) )),'1516Activity'!$C:$C,0))),"-",IF(LEFT(INDEX('1516Activity'!$F:$F,MATCH(INDIRECT(ADDRESS(ROW(),COLUMN(D:D) )),'1516Activity'!$C:$C,0)))="0","N","Y"))

SheetB 中的用法(参见:Screenshot Sheet B

=Eval('CODE-VARS'!$G)

VBA:

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

在我看来,它引用了任何 sheet 处于活动状态的值。

在您的 Eval 函数中,确保目标 sheet 处于活动状态:

Function Eval(Ref As String)
    Dim shCurrent As Worksheet: Set shCurrent = ActiveSheet
    Application.Volatile
    Application.ThisCell.Parent.Activate
    Eval = Application.ThisCell.Parent.Evaluate(Ref)
    shCurrent.Activate
End Function

我想你在找 Application.Caller:

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

您正在评估字符串 'CODE-VARS'!$G,它将 return 该单元格中的值而不是其公式。试试这个:

Function Eval(Ref As RAnge)
    Application.Volatile
    Eval = Application.ThisCell.Parent.Evaluate(Ref.formula)
End Function

问题是我正在使用 INDIRECT() 引用一个单元格,当从不同的 sheet.

调用 eval() 时它不起作用

这个有效:

INDEX(D:D,ROW())

这不是:

INDIRECT(ADDRESS(ROW(),COLUMN(D:D) ))