已解决:问题在于我的公式,我使用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
答案 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) ))