【发布时间】:2011-06-13 20:51:01
【问题描述】:
我在我的 Excel 工作表中使用 VBA,它给了我一个溢出错误。当我检查时发现它与数据错误有关,在一个单元格中显示无限的“#”字符。
每个单元格中的所有值都分配给一个字符串变量,当这个单元格进入时会产生溢出错误。我尝试使用 if 条件来验证这一点,但是每当我们检查 cell.value 时,都会产生溢出错误。有没有办法解决这个问题?
【问题讨论】:
我在我的 Excel 工作表中使用 VBA,它给了我一个溢出错误。当我检查时发现它与数据错误有关,在一个单元格中显示无限的“#”字符。
每个单元格中的所有值都分配给一个字符串变量,当这个单元格进入时会产生溢出错误。我尝试使用 if 条件来验证这一点,但是每当我们检查 cell.value 时,都会产生溢出错误。有没有办法解决这个问题?
【问题讨论】:
如果您只是阅读单元格文本,您不会收到运行时错误:
s = Range("C2").Text
Debug.Print s
' returns: "###########"
如果您真的想读取单元格值,而不是单元格文本(为什么需要这个,我不知道,因为无论如何您都将它填充到字符串中),那么这是一种解决方法,假设 # ### 由公元 10,000 年 1 月 1 日或更晚的日期引起。
Const MaxDateSerial As Double = 2958466
Dim s As String
Dim dbl As Double
Dim nf As Variant
' Save original number format
nf = Range("C2").NumberFormat
' Use read-safe number format to read cell content
Range("C2").NumberFormat = "General"
dbl = Range("C2").Value
' Restore original number format
Range("C2").NumberFormat = nf
If dbl < MaxDateSerial Then
s = Range("C2").Value
Else
s = "Date overflow!"
End If
【讨论】:
如果你正在做类似的事情
Dim s as string
Dim cl as Range
...
s = cl
' or
s = cl.value
s 将设置为工作表上显示的值,其中包含一个错误
(如果表单显示为“Error <Error Code>”,则格式为“Error <Error Code>”
如果底层单元格value有效,使用cl.value2应该可以访问
如果你正在做类似的事情
Dim v as Variant
Dim s as string
Dim r as Range
...
Set r = <SomeRange>
v = r
...
并且r范围内的一个或多个单元格是错误的,那么Runtime Error 6 Overflow会发生
如需进一步建议,请发布代码详细信息、错误发生位置、单元格值和单元格格式
如果日期序列在 1900 年 1 月 1 日(负数)之前或 9999 年 1 月 1 日之后(> 2958101),则会出现日期的############### 显示编辑实际上是 31/12/9999 = 2958465
【讨论】:
尝试使用“ISERROR()”函数过滤掉无效值。
IF(ISERROR(A1),0,A1)
【讨论】:
ISERROR 工作表函数不适用于#####。 IsError VBA 函数也没有。