2013-07-02 75 views
0

我已經插入在細胞中該值「2013年2月1日」VBA改變我的可變內容

Range("C2").Offset(aPos, 0).NumberFormat = "dd/mm/yy;@" 
    Range("C2").Offset(aPos, 0).Value = forma(t1, 2, t2) 
    MsgBox forma(t1, 2, t2) 

其中MSGBOX命令有正確地顯示,因此該字符串被正確地到達的代碼時,使得所述msgbox顯示它確定,但是當第二行在這裏做它的工作它記錄爲「01-02-2013」​​,注意日/月倒置,我已經試過一切,不知道爲什麼會發生這種情況,我什至在收到數據之前添加第一行強制格式,仍然沒有運氣。所有輸入字段均以dd/mm/yy正確格式化。

我需要這個,所以我可以做一個排序,就這樣,它殺死了我。

+1

什麼從'forma()'返回的數據類型和值? –

+0

它是這樣declated昏暗'forma(1到20,1到3,1到40)作爲字符串。我已經使用msgbox從幾個步驟中查看內容,並且在所有這些步驟中它都能正確顯示,只是在最後一步它會發生變化,甚至最後一步,在msgbox上正確顯示,但會以mm/dd/aa而不是dd/mm/aa – Cachirro

+0

...以及您特定示例中返回的值? –

回答

1

將字符串值放入日期格式的單元格時,您要求Excel將該值轉換爲實際日期。它如何能夠依賴於本地設置和實際值...

Sub Tester() 
    Debug.Print CDate("02-01-2013") '2/1/2013 
    Debug.Print CDate("20-01-2013") '1/20/2013 
    Debug.Print CDate("02-22-2013") '2/22/2013 
End Sub 

如果你想要更多的控制,你知道你的字符串是在一個特定的格式:

Dim tmp As String, arr, dt As Date 
tmp = "02-01-2013" 'forma(t1, 2, t2) 
arr = Split(tmp, "-") 
dt = DateSerial(arr(2), arr(1), arr(0)) 
Debug.Print dt 
+0

感謝隊友,你的幫助解決了我的問題,我只需要添加一個捕捉器來保存nullstrings,但是你的概念很有用,謝謝! – Cachirro