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