Excel VBA,溢流错误
我在excel工作表中使用VBA,它给了我一个超视距错误。当我检查时,我发现它与数据错误有关,在一个单元格中显示未限制的“#”字符 每个单元格中的所有值都分配给一个字符串变量,当该单元格出现时,将生成溢出错误。我试图使用if条件验证这一点,但每当我们检查cell.value时,就会产生溢出错误。有没有办法解决这个问题?尝试使用“ISERROR()”函数过滤掉无效值Excel VBA,溢流错误,vba,excel,Vba,Excel,我在excel工作表中使用VBA,它给了我一个超视距错误。当我检查时,我发现它与数据错误有关,在一个单元格中显示未限制的“#”字符 每个单元格中的所有值都分配给一个字符串变量,当该单元格出现时,将生成溢出错误。我试图使用if条件验证这一点,但每当我们检查cell.value时,就会产生溢出错误。有没有办法解决这个问题?尝试使用“ISERROR()”函数过滤掉无效值 IF(ISERROR(A1),0,A1) 如果你在做这样的事情 Dim s as string Dim cl as Range .
IF(ISERROR(A1),0,A1)
如果你在做这样的事情
Dim s as string
Dim cl as Range
...
s = cl
' or
s = cl.value
s
将设置为图纸上显示的值,其中包括错误(以“
错误
”的形式显示,如果工作表上显示的是这种情况
如果基础单元格值有效,您应该能够使用cl.value2
如果你在做这样的事情
Dim v as Variant
Dim s as string
Dim r as Range
...
Set r = <SomeRange>
v = r
...
Dim v作为变量
像线一样变暗
调光范围
...
集合r=
v=r
...
并且范围r
中的一个或多个单元格出错,则会发生运行时错误6溢出
为了进一步提供建议,请发布代码的详细信息、错误发生的位置、单元格值和单元格格式
如果日期序列在1900年1月1日之前(负数)或9999年1月1日之后(>2958101)EDIT实际上是31/12/9999=2958465,则会出现日期显示:
s = Range("C2").Text
Debug.Print s
' returns: "###########"
如果您真的想读取单元格值,而不是单元格文本(我不知道您为什么需要它,因为您正在将其填充到字符串中),那么这是一种解决方法,假设####是由公元10000年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
Const MaxDateSerial As Double=2958466
像线一样变暗
双精度dbl
Dim-nf作为变体
'保存原始数字格式
nf=范围(“C2”)。数字格式
'使用读取安全数字格式读取单元格内容
范围(“C2”).NumberFormat=“一般”
dbl=范围(“C2”).值
'恢复原始数字格式
范围(“C2”)。数字格式=nf
如果dbl
每当我们使用任何验证时,例如if(isError(objCell.Value)),这会产生运行时错误,ISERROR
工作表函数对########不起作用。ISERROR
VBA函数也不起作用。+1很好地回答了一个忘恩负义的家伙不清楚的问题。顺便说一句,溢出发生在1999年12月31日,至少在Excel 2003上是这样。谢谢@Jean-你的日期是对的-我的一个打字错误