2014-09-10 63 views
1

我正在嘗試轉換數字 - >指定的日期格式。這隻在一列(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的隱藏表格(代碼所在的位置)。使用日期格式(如上面的代碼中所指定的)更新列,然後更新文件中的所有數據透視表。

注 - I DO設置隱藏的工作表的可見度,真正改變了列的格式之前

+0

你是否已經驗證了單元格值可以在沒有任何錯誤檢查的情況下進行轉換?也許你正試圖轉換一些無法轉換的東西...... – sous2817 2014-09-10 18:25:28

+0

好吧,所以這裏是一個更新的問題 - 當我複製粘貼數據時,粘貼列中的數據以某種方式將其格式更改爲liek ########,當它應該是20140908時,因此代碼無法轉換值...在這種情況下應該做什麼? – 2014-09-10 19:27:17

+0

在數字的情況下#######意味着它是一個-ve值 – 2014-09-10 19:45:12

回答

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 
+0

好了,於是我刪除了列,然後放置了一個新的即在數據被粘貼的工作表中) - 現在正在工作(我已多次檢查)。雖然,你的這個答案對未來的參考非常有用! – 2014-09-10 20:15:03

0

你說,你的代碼首先拷貝數爲ThisWorkbook,然後嘗試將它們轉換爲Date目的?當您要求Excel將數字複製到ThisWorkbook時,Excel是否可以自動檢測其複製日期的格式爲數字,並立即將數字轉換爲Date對象?

你沒有提供你是從複製的數字格式的樣本,雖然我覺得我可以推斷出一個從傳遞的價值觀:

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

類似「年月日」或「YYYY/mm/dd「?

如果您嘗試手動粘貼(使用CTRL+CCTRL+V)格式的數字到Excel中,您會注意到Excel自動將這些值轉換爲Date對象。

您可以通過在其執行的各個點上保留代碼的工作副本來測試這一點。

+0

我試過 - 刪除了除複製部分以外的所有代碼,excel不會自動轉換數據,同時粘貼它... – 2014-09-10 19:34:56

相關問題