微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何修复 .Evaluate 四舍五入结果

如何解决如何修复 .Evaluate 四舍五入结果

我使用 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

xdouble 类型,所以我不明白为什么结果是四舍五入的......知道吗?

问题:

我是否在构建公式以对其进行评估时犯了错误


下面是我做过的几个测试

当我将公式放入单元格时,输出为:1,00042406864688

Excel 工作表公式:

=AdInterp(C2;'Fonction DCF '!U8:U31;'Fonction DCF '!V8:V31;IM:CUBD)

执行窗口:

enter image description here

注意:当我在单元格中放入公式时

Evaluate(Cells(2,"G").Formula)

输出为:1,00042406864688

enter image description here

解决方法

我会考虑 invoking the function directly,而不是让计算引擎对其进行评估。

但无论如何它应该工作。我怀疑它甚至有效 - 但 implicit ActiveSheet references 正在向它扔扳手。

Cells 成员调用不合格:

& cells(2,"C").value &

这隐含地引用了无论活动工作表是什么上的单元格。对比:

ThisWorkbook.Worksheets("Fonction DCF ") & "!" ...

这意味着传递给函数的输入数组取决于该指令运行时哪个工作表处于活动状态,因此如果目的是处理“Fonction DCF”工作表,我建议对其进行明确说明。

>

项目资源管理器中选择“Fonction DCF”表单模块(Ctrl+R),然后按F4调出属性工具窗口,查看{该工作表的 {1}} 属性。如果它显示 (Name)(或类似 - 这是默认值),请将其更改为 Sheet1,然后更改您的代码以使用其编程名称引用该工作表(我假设该工作表存在于 {{ 1}} 在编译时) - 也正如@FunThomas 恰当地建议的那样,考虑将动态计算的字符串拉入其自己的局部变量中,以使其更易于调试:

FonctionDCFSheet

(行延续以减少水平滚动)

请注意,我还清理/删除了一些无关的步骤:您不需要获取 ThisWorkbook 的单元格,然后获取该 With FonctionDCFSheet Dim dynamicEval As String dynamicEval = "AdInterp(" & .Cells(2,"C").value & "," & _ "'" & .Name & "'!U8:U31," & _ "'" & .Name & "'!V8:V31,IM:CUBD)" Debug.Print dynamicEval x = .Evaluate(dynamicEval) End With Range 来获得ParentRange 您已经按名称取消引用,并且您不需要为您正在使用的一系列单元格获取 NameWorksheet已经通过地址取消引用。

另外,因为我们现在正在调用 AddressRange 调用由 Worksheet.Evaluate 块变量限定),字符串公式在该工作表的上下文中被评估 ,因此字符串中的工作表命名变得多余,可以进一步简化字符串:

.Evaluate

刚才我注意到最后一部分 With 也被评估为不合格;使用 CreateAdxUtilityModule.AdInterp(Periode,ThisWorkbook.Worksheets("Fonction DCF ").Range("U8:U31").Value,ThisWorkbook.Worksheets("Fonction DCF ").Range("V8:V31").Value,"IM:CUBR") 'Periode is a date format dim 传递 IM:CUBDApplication.EvaluateIM:CUBD 传递相同的列,但始终在正确的工作表上,无论哪个工作表处于活动状态。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。