尝试将数字更改为日期时,我收到溢出错误

时间:2014-09-10 18:03:34

标签: excel vba date excel-vba

我正在尝试转换数字 - >指定的日期格式。这只在一列(D列)上完成。这是代码 -

'Changing date format (for UPLOADDATE column)
Application.ScreenUpdating = False
For Each c In Range("D2:D" & Cells(Rows.Count, "D").End(xlUp).row)
    c.Value = DateSerial(Left(c.Value, 4), Mid(c.Value, 5, 2), Right(c.Value, 2))
    c.NumberFormat = "mm/dd/yyyy"
Next
Application.ScreenUpdating = False

现在,只要我的代码到达这一点,它就会突然显示以下错误: -

运行时错误'6': 溢出

我的代码总体上将数据从另一个excel文件复制到excel的隐藏工作表(代码所在的位置)。使用日期格式更新列(如上面的代码中所指定),然后更新文件中的所有数据透视表。

注意 - 在更改列的格式

之前,我会将隐藏工作表的可见性设置为true

2 个答案:

答案 0 :(得分:2)

您收到该错误,因为该单元格具有负值或格式为日期的非常大的值。您可能希望查看########

的说明

参见此示例

enter image description here

测试代码

Sub Sample()
    Dim c As Range

    Set c = Range("B3")

    Debug.Print DateSerial(Left(c.Value, 4), Mid(c.Value, 5, 2), Right(c.Value, 2))
End Sub

enter image description here

逐步执行代码并检查单元格C的地址,然后手动检查该单元格包含的内容。

查找有问题的单元格地址的一种方法是使用错误处理。见这个例子

Sub Sample()
    Dim c As Range

    Set c = Range("B3")

    On Error GoTo Whoa

    Debug.Print DateSerial(Left(c.Value, 4), Mid(c.Value, 5, 2), Right(c.Value, 2))

    Exit Sub
Whoa:
    MsgBox "The Error Happened in " & c.Address
End Sub

答案 1 :(得分:0)

您说您的代码首先将数字复制到ThisWorkbook,然后尝试将它们转换为Date对象?是否有可能当您要求Excel将数字复制到ThisWorkbook时,Excel会自动检测其复制日期是否格式化为数字并立即将数字转换为Date个对象?

您没有提供您要复制的数字格式的示例,但我认为我可以从传递给的值中推断出一个:

DateSerial(Left(c.Value, 4), Mid(c.Value, 5, 2), Right(c.Value, 2))

像" yyyymmdd"或" yyyy / mm / dd" ?

如果您尝试手动粘贴(使用CTRL+CCTRL+V)格式化为Excel的数字,您会注意到Excel会自动将这些值转换为Date个对象。< / p>

您可以通过将代码的副本留在其执行的不同位置来测试这一点。