2016-07-05 96 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