2016-07-05 97 views
1

我有一個用戶窗體,其日期和時間戳記爲dd/mm/yyyy hh:mm:ss。VBA Userform日期/時間戳 - UK複製到單元格時,日期更改爲US格式

它顯示在文本框中英國格式,我使用此代碼它產生:

Dim iNow 
Dim d(1 To 6) 
Dim i As Integer 


iNow = Now 
d(3) = Year(iNow) 
d(2) = Month(iNow) & "/" 
d(1) = Day(iNow) & "/" 
d(4) = Hour(iNow) & ":" 
d(5) = Minute(iNow) & ":" 
d(6) = Second(iNow) 

For i = 1 To 6 
    If d(i) < 10 Then Timestamp = Timestamp & "0" 
    Timestamp = Timestamp & d(i) 
    If i = 3 Then Timestamp = Timestamp & " " 

Next i 
datetextbox.Value = Timestamp 

出現問題時的代碼轉移使用下面的代碼此信息到Excel的數據庫表下面的塊:

'Determine emptyRow in Database Sheet 
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 
Cells(emptyRow, 14).Value = datetextbox.Value 

當進入電子表格單元格時,會發生什麼變化爲MM/DD/YYYY。我嘗試過VBA中的數字格式化,並且在下拉菜單中使用了自定義設置,並且檢查了區域設置在兩臺獨立的機器上是英國的。這是我創建了一個文件,將使用這個公式,然後將數據傳送到一個清潔片,承認最近的相同的參考數量的記錄組成部分:

=MAX(IF(Database!$P$2:$P$1437=P488,IF(Database!$P$2:$P$1437=P488,Database!$N$2:$N$1437,""))) 

我也嘗試一個簡單的現在( )說明格式dd/mm/yyyy/hh:mm:ss,但是這也轉換爲美國格式。

任何幫助,將不勝感激。

+0

請注意,您也可以使用'Timestamp = Format(現在,「DD/MM/YYYY hh:mm:ss」)'。如果你的區域格式使用'/'以外的東西作爲分隔符,則需要使用另外的「\」:'「DD \/MM \/YYYY」'。時間戳可能應該是'Dim'ed'String',所以你最終不會得到'Date'類型, – arcadeprecinct

回答

1

我懷疑這之前已經在這裏回答了很多次,但你需要使用CDate

Cells(emptyRow, 14).Value = CDate(datetextbox.Value) 

這將日期字符串轉換爲使用您的區域設置一個真正的日期值。

+0

感謝你發佈,它完美的工作!我發現沒有了解CDate知識的其他東西都是以錯誤的方式關注以某種方式填充文本框或使用vba格式化單元格。 –

+0

有沒有辦法告訴'CDate'(或任何其他函數)如何解釋字符串?它使用區域設置(我認爲)在這種情況下工作,但如果我想閱讀美式風格的日期字符串呢? – arcadeprecinct

+0

如果你想使用美式格式,你根本不需要'CDate'。 VBA將默認爲美國格式。 – Rory