【问题标题】:Excel VBA, over flow errorExcel VBA,溢出错误
【发布时间】:2011-06-13 20:51:01
【问题描述】:

我在我的 Excel 工作表中使用 VBA,它给了我一个溢出错误。当我检查时发现它与数据错误有关,在一个单元格中显示无限的“#”字符。

每个单元格中的所有值都分配给一个字符串变量,当这个单元格进入时会产生溢出错误。我尝试使用 if 条件来验证这一点,但是每当我们检查 cell.value 时,都会产生溢出错误。有没有办法解决这个问题?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    如果您只是阅读单元格文本,您不会收到运行时错误:

    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
    

    【讨论】:

      【解决方案2】:

      如果你正在做类似的事情

      Dim s as string
      Dim cl as Range
      ...
      s = cl
      ' or
      s = cl.value
      

      s 将设置为工作表上显示的值,其中包含一个错误
      (如果表单显示为“Error &lt;Error Code&gt;”,则格式为“Error &lt;Error Code&gt;

      如果底层单元格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

      【讨论】:

      • +1 可以很好地回答一个忘恩负义的家伙的不清楚的问题。 BTW 溢出发生在 9999 年 12 月 31 日,至少在 Excel 2003 上。
      • 谢谢@Jean - 你对日期的看法是对的 - 我的错字
      【解决方案3】:

      尝试使用“ISERROR()”函数过滤掉无效值。

      IF(ISERROR(A1),0,A1)
      

      【讨论】:

      • 无论何时我们使用任何验证,例如 if (isError(objCell.Value)),都会出现运行时错误
      • ISERROR 工作表函数不适用于#####。 IsError VBA 函数也没有。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多