Solved: The problem is in my formula where I'm referencing a cell using INDIRECT() which doesn't work when sheet is different. See answer.
我在一张表中有一个公式,我想要做的是使用另一张表中的公式,使用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 回答
您正在评估字符串
'CODE-VARS'!$G$5
,它将返回该单元格中的值而不是其公式 . 试试这个:在我看来,它引用任何活动表中的值 .
在
Eval
函数中,确保目标工作表处于活动状态:我想你正在寻找Application.Caller:
问题是我使用INDIRECT()引用一个单元格,当从另一个工作表调用eval()时,它不起作用 .
这有效:
这不是: