Excel VBA评估另一个工作表中的公式

时间:2016-04-24 16:18:54

标签: excel vba eval

已解决:问题在于我的公式,我使用INDIRECT()引用单元格,当工作表不同时,它不起作用。见答案。

我在一张纸上有一个公式,我想要做的是使用另一张纸上的公式,使用eval来评估公式。但是,结果并不如预期。似乎公式使用了工作表A中的值而不是调用者工作表B.

表A中的公式(参见: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"))

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

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

VBA:

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

在我看来,它引用任何活动表中的值。

Eval功能中,确保目标表处于活动状态:

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

答案 2 :(得分:0)

我认为您正在寻找Application.Caller:

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

答案 3 :(得分:0)

问题是我使用INDIRECT()引用一个单元格,当从另一个工作表调用eval()时,它不起作用。

这有效:

INDEX(D:D,ROW())

这不是:

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