【问题标题】:VBA Format function into Textbox not working文本框的VBA格式功能不起作用
【发布时间】:2020-06-05 12:15:44
【问题描述】:

美好的一天

我正在尝试构建一个加载项,该加载项可以以相同的方式处理来自和传入 MySQL 数据库的值,而不管 Windows 区域设置如何。

当区域设置将短日期设置为“dd MMM yyyy”时,我不知道如何将该格式更改为“dd/mm/yyyy”

当我使用时:

Format(Date, "dd/mm/yyyy")

翻译为: 05 06 2020

数据库上的哪些错误。我试过CDate和DateSerial,都无济于事。

我基本上将名为 dateFormat 的全局常量变量设置为:

Public Const dateFormat = "dd/mm/yyyy"

然后我使用以下内容尝试将值写入我使用的文本框:

txtCreated.Value = Format(Date, dateFormat)

但文本框随后包含以下值: 05 06 2020

将此值写入我的数据库时,我使用:

rs!ncreate = Format(txtCreated.Value, dateFormat)

然后得到一个日期格式错误,说格式“dd mm yyyy”不被接受,即使我试图以“dd/mm/yyy”格式发送它

有什么想法吗?

【问题讨论】:

  • 作为参考,这里是 doc for the format function... 根据该文档,/ 是日期分隔符,但是:在格式化输出中用作日期分隔符的实际字符已确定由您的系统设置决定。
  • 我的 reigon 设置将“dd/mm/yyyy”作为默认短日期设置,因此测试起来有点棘手 - 您也许可以根据前面提到的文档使用反斜杠 \ 来显示 @ 987654328@ 作为文字字符?
  • 谢谢塞缪尔。您的第二条评论仅返回“05m6y20157”。用户不想更改其区域设置。如果有意义的话,我希望我的加载项可以使用任何区域日期格式。
  • 是的,我了解这些要求-我担心第二个建议可能会返回类似的内容(这对我来说是正确的,但我怀疑这是由于我所在的地区)-我现在正在环顾四周,我确信在此之前我已经找到了一些关于日期和地区的有用信息……
  • 谢谢。我现在用它来变出我自己的函数。倾向于那个解决方案。我将在下面发布我的答案。非常感谢您的帮助,谢谢。

标签: excel vba


【解决方案1】:

要使用this Microsoft doc 作为参考,这将根据需要输出您的日期:

Public Function MakeEuroDate(DateToFormat As Variant) As String 
 
    ' Do nothing if the value is not a date. 
    If Not IsDate(DateToFormat) Then Exit Function 

    ' Format the date value as "dd/mm/yyyy" date formatted string expression.
    MakeEuroDate = "#" & Day(DateToFormat) & "/" & Month(DateToFormat) & "/" & Year(DateToFormat) & "#"

End Function

注意:此输出中删除了前导零,因此一个月的第一天将是 1 而不是 01

【讨论】:

  • 优秀。谢谢。我只写最后一行: MakeEuroDate = Format(DateToFormat, "dd") & "/" & Format(DateToFormat, "mm") & "/" & Format(DateToFormat, "yyyy") 否则日期和月份不是 05 和 06,而是 5 和 6。
  • 另一种选择是保留原始格式dd/mm/yyyy 并使用Replace 将空格更改为/。如果格式化日期已经包含/,则不会发生任何事情。
  • @RenierWessels 您应该重新添加您的答案(这就是您的评论所述) - 如果它可以更好地提供解决方案,可以回答您自己的问题!此外,根据 BigBen 的评论,在原始输出上使用 Replace 函数也是用更少的代码解决这个问题的另一种方法!
  • 完成。谢谢。我只是厌倦了替换可能并不总是返回预期的输出。我认为该功能会。
  • 因为格式并不总是有效。我有来自不同区域设置的 Format(Date,"dd/mm/yyyy") return "5 6 2020"、"6 5 2020"、"05 06 2020"、"05 Jun 2020" 和 "06 05 2020" .仅用 / 替换空格不适用于所有用例。函数方法更安全,因为可以控制日、月、年的格式、分隔符以及它们结束的顺序。
【解决方案2】:

根据 Samuel 在我帖子中的 cmets 中的建议,我现在已经构建了一个自定义函数来为我转换日期:

Function FormatDate(DateIn As Variant) As String

    ' Do nothing if the value is not a date.
    If Not IsDate(DateIn) Then Exit Function

    ' Format the date value as "dd/mm/yyyy"
    FormatDate = Format(DateIn, "dd") & "/" & Format(DateIn, "mm") & "/" & Format(DateIn, "yyyy")

End Function

例如,使用Format() 函数允许输出显示前导零;输入 "1 May 2020" 将返回 #01/05/2020# 而不是 #1/5/2020#

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多