获取系统的日期分隔符

t3c*_*b0t 3 excel ms-access vba office365

我需要将各种 Excel 文件导入 Access 数据库。有两个日期列使用所有可能的格式,例如01.05.202001,05,202001/05/2020取决于它们的创建方式。有时它是有效日期,有时它只是一个字符串。

Access 应用程序也将在不同的系统上运行,因此它们可能使用不同的分隔符。这意味着我不能只替换 all.,with /。我将创建一个替换函数,该函数可以为正在运行的任何系统规范化字符串,但我无法弄清楚如何获取当前系统的日期分隔符

VBA 能够给我这些信息吗?

Mat*_*don 5

使用带有属性的XlApplicationInternational枚举Application.International来检索此配置。

/在我的系统上返回:

Excel.Application.International(xlApplicationInternational.xlDateSeparator)
Run Code Online (Sandbox Code Playgroud)

如果您在 Access 主机中,您将希望避免使用全局Excel.Application对象,并使用您拥有的实例,并且您可以Quit在完成后使用该实例:

Dim app As Excel.Application
Set app = New Excel.Application
Debug.Print app.International(xlApplicationInternational.xlDateSeparator)
'...
app.Quit
Run Code Online (Sandbox Code Playgroud)


Gus*_*tav 5

真正简单快捷的方法是让 VBA 完成这项工作,因为字符“ / ”到Format指定日期分隔符:

' Get localised date separator.
DateSeparator = Format(Date, "/")

' Denmark -> "-"
' Germany -> "."
' US      -> "/"
Run Code Online (Sandbox Code Playgroud)

为什么这样做:

(/) - 日期分隔符。在某些语言环境中,可以使用其他字符来表示日期分隔符。在格式化日期值时,日期分隔符分隔日、月和年。在格式化输出中用作日期分隔符的实际字符由您的系统设置决定。

来自用户定义的日期/时间格式

  • @MathieuGuindon 确实,这是一个不错的技巧,但似乎并不那么黑客。我引用了文档中确认其机制的部分(我很好奇它为什么起作用,所以我检查了它)。我觉得这个解决方案也是可以的。我实际上也接受了;-) (2认同)