【问题标题】:VBA Userform Date/Time Stamp - UK Date changes to US format when copied to cellVBA 用户表单日期/时间戳 - 复制到单元格时英国日期更改为美国格式
【发布时间】:2016-11-07 00:44:36
【问题描述】:

我有一个用户表单,它的日期和时间戳为 dd/mm/yyyy hh:mm:ss。

它在文本框中以英国格式显示,我使用以下代码生成它:

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 和下拉菜单中尝试了数字格式并使用了自定义设置,并检查了两台不同机器上的区域设置是否为 UK。这是我创建的文档的组成部分,它将使用此公式识别相同参考编号的最新记录,然后将数据传输到清理表:

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

我确实尝试了一个简单的 Now() 声明格式 dd/mm/yyyy/hh:mm:ss 但这也转换为美国格式。

任何帮助将不胜感激。

【问题讨论】:

  • 请注意,您也可以使用Timestamp = Format(Now,"DD/MM/YYYY hh:mm:ss")。如果您的区域格式使用 / 以外的其他内容作为分隔符,则需要使用额外的“\”:"DD\/MM\/YYYY"。时间戳可能应该是 Dimed 为 String 这样你就不会以 Date 类型结束,

标签: vba excel date datetime


【解决方案1】:

我怀疑这个问题之前已经在这里回答过很多次了,但是你需要使用CDate

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

这将使用您的区域设置将日期字符串转换为真实的日期值。

【讨论】:

  • 感谢您的发帖,它运行良好!我发现在不知道 CDate 的情况下发布的所有其他内容都是以错误的方式进行的,专注于以某种方式填充文本框或使用 vba 格式化单元格。
  • 有没有办法告诉CDate(或任何其他函数)如何解释字符串?它使用在这种情况下有效的区域设置(我认为),但是如果我想读取美式日期字符串怎么办?
  • 如果要使用美式格式,则根本不需要CDate。 VBA 将默认为美国格式。
  • 好的,但是如果美国人想要读取“DD/MM/YYYY”日期怎么办?我认为应该有类似CDate(string,format) 但显然没有。
  • @arcadeprecinct 我们在这里有点跑题了,但是为什么他们会在用户表单中看到英国格式的日期?您可以使用Format 以您指定的任何格式返回格式化字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 2021-11-18
相关资源
最近更新 更多