Excel TEXT(dd.mm.yyyy) 函数和不同的客户端语言

Blu*_*tor 3 excel vba function excel-formula

我如何制作一个可以在每种语言中使用的格式化日期的函数?我想实现以下功能:

=CONCATENATE(TEXT(C8;"TT.MM.JJJJ");"/";G8)
Run Code Online (Sandbox Code Playgroud)

这里的问题是,我使用英文客户端,但因为我是德国人,excel 迫使我使用 T 表示日,J 表示年。我认为这会导致位于英国的 PC 出现问题(例如)。

我认为[$-409]行不通,因为我仍然必须使用 T 表示天,J 表示一年。对此(功能方面)有什么好的解决方案吗?

Vit*_*ata 5

如果您传入公式的值,""则无法根据本地化设置进行更改。

一个很好的方法是在 VBA 中使用自定义函数,"TT.MM.JJJJ"如果您在德国和"DD.MM.YYYY"英国,则返回。

Public Function CorrectString() As String

    Select Case Application.International(XlApplicationInternational.xlCountryCode)
        Case 1
            CorrectString = "DD.MM.YYYY"
        Case 49
            CorrectString = "TT.MM.JJJJ"
        Case Else
            CorrectString = "ERROR"
    End Select

End Function
Run Code Online (Sandbox Code Playgroud)

将允许您像这样调用函数:

=CONCATENATE(TEXT(C8;CorrectString());"/";G8)
Run Code Online (Sandbox Code Playgroud)

根据 excel 语言,它会提供德语或英语版本。

为了简化公式,请尝试仅调用:

 =TEXT(21322;CorrectString())
Run Code Online (Sandbox Code Playgroud)

这应该返回17.05.1958

@Dan 在评论中提到的区域语言来源:https ://bettersolutions.com/vba/macros/region-language.htm

或运行此命令以查看当前 Excel 的相应编号:

MsgBox xlApplicationInternational.xlCountryCode
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!对我来说,除了写下 VBA 代码之外别无他法,这真是太疯狂了。 (3认同)