使用其他语言在VBA中格式化日期

时间:2018-04-12 13:20:11

标签: access-vba

当我在VBA中使用Format语句时,我经常使用Excel来构建命令的format元素。这通常很好。但是我想用意大利语输出日期。在电子表格中,公式“= TEXT(NOW(),”[$ -410] d mmmm yyyy“)”retuns“12 aprile 2018”。但是,如果我在VBA中写下以下内容

MsgBox格式(现在(),“[$ -410] d mmmm yyyy”)

我得到“2018年4月12日”而不是我希望的意大利版本。我问的原因是我想在Access中用VBA创建一个意大利日期,所以不想用Excel来做。

我想问题是格式语句不喜欢“[$ -410]”元素。我可以在格式字符串中添加其他东西以获得意大利日期吗?我可以更改VBA中的系统设置以输出意大利日期并在宏中再次更改吗?

2 个答案:

答案 0 :(得分:1)

实际上有一个解决方案,它是使用工作表功能,因为可以强制使用特定语言。它可以通过 Application.WorksheetFunction 在 VBA 中访问:

Application.WorksheetFunction.Text(Date,  "[$-410]d mmmm yyyy")

然后您可以使用任何语言设置(例如listed here

答案 1 :(得分:0)

VBA只“知道”本地月份名称。因此,您可能必须为英文名称运行与此类似的函数:

' Returns the English month name for the passed month number.
' Accepted numbers are 1 to 12. 
' If Abbreviate is True, the returned name is abbreviated.
'
' 2015-11-25. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function MonthNameInvariant( _
    ByVal Month As Integer, _
    Optional ByVal Abbreviate As Boolean) _
    As String

    Const AbbreviatedLength As Integer = 3

    Dim MonthName( _
        MinMonthValue To _
        MaxMonthValue)      As String
    Dim Name                As String

    ' Non-localized (invariant) month names.
    MonthName(1) = "January"
    MonthName(2) = "February"
    MonthName(3) = "March"
    MonthName(4) = "April"
    MonthName(5) = "May"
    MonthName(6) = "June"
    MonthName(7) = "July"
    MonthName(8) = "August"
    MonthName(9) = "September"
    MonthName(10) = "October"
    MonthName(11) = "November"
    MonthName(12) = "December"

    If Abbreviate = True Then
        Name = Left(MonthName(Month), AbbreviatedLength)
    Else
        Name = MonthName(Month)
    End If

    MonthNameInvariant = Name

End Function