【发布时间】:2021-05-16 07:43:12
【问题描述】:
我使用Evaluate 来执行这个公式:
x = Application.Evaluate("AdInterp(" & cells(2,"C").value & "," & "'" & ThisWorkbook.Worksheets("Fonction DCF ").Range("U8:U31").Parent.Name & "'!" & ThisWorkbook.Worksheets("Fonction DCF ").Range("U8:U31").Address(external:=False) & "," & "'" & ThisWorkbook.Worksheets("Fonction DCF ").Range("V8:V31").Parent.Name & "'!" & ThisWorkbook.Worksheets("Fonction DCF ").Range("V8:V31").Address(external:=False) & ",IM:CUBD)")
它返回 1(似乎是 .Evaluate 舍入结果)。 例外的输出是:1,00042406864688
x 是 double 类型,所以我不明白为什么结果是四舍五入的......有什么想法吗?
问题:
我是否在构建公式以对其进行评估时犯了错误?
以下几个我做过的测试
当我将公式放入单元格时,输出为:1,00042406864688
Excel工作表公式:
=AdInterp(C2;'Fonction DCF '!U8:U31;'Fonction DCF '!V8:V31;IM:CUBD)
执行窗口:
注意:当我将公式放入单元格时,我会这样做
Evaluate(Cells(2,"G").Formula)
输出为:1,00042406864688
【问题讨论】:
-
cells(2,"C")指向您想要的工作表(Activesheet)? -
@FunThomas 确实如此。我的问题是结果被四舍五入到 1 但我不希望它被四舍五入
-
将难以重现,但可能有几个问题:使用
Worksheet.Evaluate而不是Application.Evaluate。那么ThisWorkbook.Worksheets("Fonction DCF ").Range("U8:U31").Parent.Name可以简化为"Fonction DCF "。 -
不能直接调用
AdInterp吗? -
不,我的意思是
x = AdInterp(args)。您正在让 Excel 计算引擎评估一个函数,但您已经在代码中,计算引擎不需要参与 - 只需调用函数 如果它在范围内(请参阅@BigBen's上面的评论,看起来确实有可能只需要从DLL中导入函数)。
标签: excel vba evaluate thomson-reuters-eikon