2014-03-27 72 views
0

我已經創建了此子文件,旨在採用默認美國日期約定,將其更改爲英文格式「yyyy-mm-dd」,然後轉換爲字符串。我想在轉換爲字符串之前更改格式,因爲它更容易處理我的目的。但是,儘管單元格格式已更改,但字符串似乎仍以原始美式格式保存。我怎樣才能解決這個問題?這是什麼原因?將日期格式轉換爲字符串

Sub Changedate() 

    Sheet1.Cells(1, 3).Select 
    Selection.NumberFormat = "yyyy-mm-dd;@" 
    Sheet1.Cells(1, 4).Select 
    Selection.NumberFormat = "yyyy-mm-dd;@" 

    Dim firstDate As String 
    Dim secondDate As String 

    firstDate = Str(Sheet1.Cells(1, 3).Value) 
    secondDate = Str(Sheet1.Cells(1, 4).Value) 

    MsgBox firstDate 

    Sheet1.Cells(1, 3).Select 
    Selection.NumberFormat = "m/d/yyyy" 
    Sheet1.Cells(1, 4).Select 
    Selection.NumberFormat = "m/d/yyyy" 

End Sub 
+0

什麼是你實際**看到**在一個單元格中的典型值.......「as-formatted」值? –

回答

1

你應該使用:
firstDate = format(Sheet1.Cells(1, 3).Value, "yyyy-mm-dd")
Excel的日期只是一個數字和不斷變化的NumberFormat隻影響它的顯示方式。 Str()可能使用您的系統默認日期格式,您必須使用Format()來強制它。

+0

似乎不起作用。我試過這個,我得到一個編譯錯誤...它**應**工作(我看在VBA幫助文件,並複製和粘貼他們的示例的格式),但錯誤說「預期數組」 – user1759942

+0

代碼I爲我發佈的作品可以從表格中發佈確切的價值(正如Gary所問)? – avb

+0

其實不是我的問題,我只是在發佈我的答案之前測試過它,因爲如果它工作,我不會麻煩。它是一個編譯錯誤,所以實際上與單元格中的值無關。雖然我設置的單元格中的「實際」值是'09/03/2010 ' – user1759942

1

你還可以嘗試的是使用.text屬性而不是.value.value獲取單元格內容而不格式化。所以你可能會看到使用.value錯誤地格式化字符串。 .text獲取單元格內容格式(觀察運行時間,如果這是在循環中運行,則可能需要很長時間).是獲取單元格內容的最慢方法,但只有幾行或幾行它不會造成太大的差異

相關問題