gpt4 book ai didi

vba - 这些求和函数之间的可靠性有差异吗?

转载 作者:行者123 更新时间:2023-12-03 00:47:05 24 4
gpt4 key购买 nike

所以有一天我得到了一些奇怪的总和值,我完全被难住了。我放弃了在 VBA 中使用求和函数,只是将值相加(通过循环),但后来我在某处读到,在 VBA 中使用求和函数对开发人员来说并不总是可靠? (我找不到该帖子了,但我仍在寻找它)。

这句话有道理吗?我知道很多人都有不同的方法来从一系列单元格中获取总和 - 而不是太固执,其中哪一个会返回最准确的结果?

Sub testsums()

Dim metric1 As Integer, metric2 As Integer, metric3 As Integer

metric1 = Application.Sum(Range(("A1"), ("Z1")))

metric2 = Application.WorksheetFunction.Sum(Range(("A1"), ("Z1")))

metric3 = WorksheetFunction.Sum(Range(("A1"), ("Z1")))

End Sub

我正在努力重现我的错误 - 基本上在循环许多行(15,000+)并获取总和时,有些返回了不应该出现的零。

最佳答案

  • Application.Sum(Range(("A1"), ("Z1")))

    这是针对 Excel.Application 的后期绑定(bind)调用,在运行时解决;与任何后期绑定(bind)调用(例如针对 ObjectVariant)一样,您无法获得 IntelliSense、自动完成功能和编译时验证(无论是拼写错误)在名称或参数的顺序或数量中。如果调用无效或函数导致错误,则会返回一个 Error 值,您可以使用 IsError VBA 函数验证该值(当然,如果函数名称中有拼写错误,您将得到运行时错误#438“对象不支持此属性或方法”)。

    使此语法起作用的原因是 Excel.Application COM 接口(interface)有一个标志使其可扩展 - 我不确定它是否可以直接扩展-up WorksheetFunction 接口(interface),或者如果它只是将成员加倍,但无论如何,这就是发生的事情:您正在调用 Application 接口(interface)上不存在的成员编译时。

  • Application.WorksheetFunction.Sum(Range(("A1"), ("Z1")))

    这是对 Excel.WorksheetFunction 的早期绑定(bind)调用,在编译时解决;您可以获得 IntelliSense、自动完成和编译时验证。拼写错误将无法编译,缺少所需参数也将无法编译。如果调用无效或函数导致错误,这将引发 VBA 运行时错误,您可以使用标准 VBA 通过 On Error 语句来处理该错误-惯用的错误处理。

  • WorksheetFunction.Sum(Range(("A1"), ("Z1")))

    这与 Application.WorksheetFunction.Sum 完全相同,只是它不是完全限定的。如果您的项目有 WorksheetFunction 类,或者范围内有 WorksheetFunction 对象变量,则它将优先于完全限定的 Application.WorksheetFunction 尽可能调用解析(这可能会导致编译错误)。否则,相同。


哪一个“更可靠”取决于您认为“可靠”的到底是什么。就我个人而言,我认为编译时解析完全值得,因此“最可靠”将是完全合格的早期绑定(bind)版本。

关于vba - 这些求和函数之间的可靠性有差异吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46119980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com