2015-02-24 126 views
0

我有以下內容的單元格:天和月被顛倒

2015年1月2日

小區被格式化日期

然後我複製的價值,並把它放在我的模塊中類:

 Set Line = New CTravelLine 
     Line.Date= Cells(1, 8).value 

一切工作正常,直到我把另一個單元格該值的時刻:

值01/02/2015變爲02/01/2015。 我使用這種格式(dd/mm/yyyy)。我的印象是,當日子數值低於一個月時,這兩個值是相反的。該值是反轉無論我試過的方法:

方法1:

Dim WrdArray() As String, datetest As String 
    WrdArray() = Split(travelLine.Date, "/") 
    datetest= WrdArray(0) & "/" & WrdArray(1) & "/" & WrdArray(2) 
    Cells(5, 5) = datetest 

方法2:

Cells(5, 5) = travelLine.Date 

我不明白我怎麼能解決這個問題。在此先感謝您的幫助。

+0

您的Windows區域設置設置爲什麼格式? – Ditto 2015-02-24 13:35:40

+0

首先,您似乎有一個與美國不同的區域設置(VBA的默認設置)。 正如您所注意到的,如果您的日期天數小於月份,則您的格式設置會相應地將其翻轉。但是,您需要知道,它只是格式化單元格中顯示的文本,而不是單元格的實際值。 因此,您的問題是區域設置格式與實際單元格值格式之間的衝突。爲了規避這種情況,最好的辦法是將單元格格式設置爲文本而不是日期。 – 2015-02-24 14:06:02

+0

如果您的單元格包含真實日期值,並且travelLine類的Date屬性是實際的日期類型,則不應該發生這種情況。如果上述任何一種都是文本,您將遇到此問題,並且在處理文本時應該使用CDate。 – Rory 2015-02-24 15:36:05

回答

2

這可能是由於'區域格式問題'造成的。

當從其他數據源導入日期時,Excel有強制使用美國日期格式(mm/dd/yyyy)的習慣。所以,如果您的日期恰好是1 - 12,那麼Excel會將日期切換爲mm/dd/yyyy。

當從文本文件導入日期時,VBA代碼中有一個選項可應用區域格式來糾正此問題。從「日期」格式類別「文本」 excelsheet日期列的

OR

更改數字格式;保存。 (保存後運行VBA代碼,如果有的話,現在檢查日期格式是'文本'還是變回'日期')

如果它已經改回'日期',嘗試修復它爲'text'

如果是'text';糾正錯誤的日期單元格並保存excel表單。這將使日期不會自動更改爲美國格式。

+0

強制VBA識別特殊格式?當與Word日期字段相比時,我遇到了'CDate'的問題,該日期字段可以識別沒有問題的格式,但是CDate'反向天和月。 – R3uK 2017-02-15 05:56:06

0

我和你有同樣的問題。

讓我解釋什麼,我想做的事:

1)我有一些日期csv文件。 2)我在變量表中複製一張我的表格的範圍。該範圍包含一些帶日期的列。 3)我在我的桌子上做了一些操作(非常基本的) 4)我轉置我的變量表(因爲只有變量表的最後一個維度可以增加) 5)我把我的變量表放在一張新的表格上。

我發現: 執行步驟1)2)3)和4)後沒有日期問題。日期問題在紙上書寫時顯示...

考慮到Avidan在15年2月24日13:36的帖子中說過,我想這是強制美國格式mm/dd/yyyy的excel ...所以我只是在開始時改變日期格式我的節目的:

在開始任何操作日期之前: 1)做 .Cells(「在我的日期是」)=格式(.Cells(「在我的日期是」),「年月日」) 2)執行你的程序 3)在一張紙上寫表格 4)備份到你喜歡的紙張上直接輸入日期格式

-1

只需使用:

Line.Date = cDate(Cells(1, 8).value2) 
+1

歡迎來到Stack Overflow!儘管這段代碼可以解決這個問題,但[包括一個解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! – 2017-08-16 08:26:06