当我在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中的系统设置以输出意大利日期并在宏中再次更改吗?
答案 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