gpt4 book ai didi

Excel VBA WorksheetFunction.IsError 误报

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

在VBA中,我试图确定单元格是否包含错误值,例如由于无效的功能。我现有的代码使用 Excel.WorksheetFunction.IsError方法,但我最近遇到一个导致误报的案例。该单元格不包含错误值,但 Excel.WorksheetFunction.IsError 返回 true。另一种方法 VBA.Information.IsError 不会表现出此行为;它正确地返回 false。

我能够确定该问题仅在单元格包含长度超过 255 个字符的值时发生。以下是验证行为的例程:

Sub IsErrorBehavior()
Dim i As Long
Dim str As String
Dim r1 As Range, r2 As Range
Dim xlWSFuncCheck1 As Boolean, xlWSFuncCheck2 As Boolean
Dim vbaInfCheck1 As Boolean, vbaInfCheck2 As Boolean

str = WorksheetFunction.Rept("A", 255)

Set r1 = Range("A1")
r1.Value = str
xlWSFuncCheck1 = Excel.WorksheetFunction.IsError(r1)
vbaInfCheck1 = VBA.Information.IsError(r1)

str = str & "A"

Set r2 = Range("A2")
r2.Value = str
xlWSFuncCheck2 = Excel.WorksheetFunction.IsError(r2)
vbaInfCheck2 = VBA.Information.IsError(r2)
End Sub

上述例程是在Excel 2010中编写的,并在Excel 2007中进行了验证。目标应用程序当前在Excel 2007下运行。

问题 1:这是一个错误,还是对这种情况下 Excel.WorksheetFunction.IsError 的行为有合理的解释?

我将切换到 VBA.Information.IsError 方法,但现在我有点担心我也可能会遇到错误。这导致我...

问题 2:是否有更可靠的方法来检查特定单元格中的错误?

最佳答案

不是针对 Excel 2007 的完整回复,但可能会为其他同行跟进提供一些想法。

问题 1:这是一个错误,还是对这种情况下 Excel.WorksheetFunction.IsError 的行为有合理的解释?

曾经有一个已知的旧错误 255 character limit这应该在新版本中得到修复。您的问题性质非常相似,因此可能是同一来源,尽管无法确定。

似乎将 RangeValue 设置为等于超过 255 个字符的 String 会破坏 Range code> 本身,并使 IsErrorRange 的检查为 false。

问题 2:是否有更可靠的方法来检查特定单元格中的错误?

我会像 CPearson's website 那样做,即检查 r2.Value 而不是 r2,并使用 IsError 函数(即 VBA IsError) 具有更稳定的性能。一般来说,检查 Range 对象是否有错误可能会很棘手。在 this question不久前,由于在后台进行类型转换,我得到了有趣的结果。我想这里也可能是这种情况。无论如何,明确说明会有所帮助(如果使用 r2.value,您的示例将按预期工作)。

关于Excel VBA WorksheetFunction.IsError 误报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22210104/

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