【问题标题】:Is there a way to force a locale when formatting a date in Outlook?在 Outlook 中格式化日期时,有没有办法强制使用区域设置?
【发布时间】:2017-11-06 01:25:33
【问题描述】:

我想知道是否有与"[$-409]mmmm yyyy" 等效的 Outlook VBA,它可以让 Excel 在您想要的语言环境中显示日期。
Format(Date, "[$-409]mmmm yyyy") 只是默默地被忽略,只显示在系统语言环境中(我需要在两个不同的地方使用 2 个不同的语言环境,因此不能选择更改系统语言环境)。

编辑:我的问题实际上与this one 几乎是重复的,而且在应用程序 Outlook 或 PowerPoint 中似乎都不可能。

【问题讨论】:

  • 我的理解是$-409的意思是在美国版的“mmmm yyyy”中显示一个日期。也就是说,将月份显示为一月、二月等,而不是使用系统区域设置定义的语言。你有哪两个语言环境?
  • 这个答案stackoverflow.com/a/899290/973283中有一些相关信息。
  • @TonyDallimore 您对$-409 的含义是正确的,但它似乎只适用于 Excel 的单元格数字格式,而不适用于 VBA,这是我在这里提出问题的目的。

标签: vba date outlook format locale


【解决方案1】:

对不起,我没有在评论中明确表达我的观点。

当您在格式中包含“$-409”时,是您决定需要美国格式日期。 Excel 可能会帮助您创建美国格式的日期,但它不会帮助您决定需要哪种格式的日期。

您必须确定 Jesse 得到一个美国约会对象,John 得到一个英国约会对象,而 Jacque 得到一个法国约会对象。一旦您做出决定,VB 将在格式化日期时接受国家代码,但我不相信 VBA 提供任何此类功能。由于您只有两个语言环境,我建议您自己进行转换。

Option Explicit
Sub Demo()

 Dim Prompt As String
 Dim Recipient As String
 Dim MonthsFrench() As Variant
 Dim Today As Date

 Today = Now()
 MonthsFrench = VBA.Array("", "Janvier", "Févier", "Mars", "Avril", "Mai", "Juin", _
                          "Juillet", "Auguste", "Septembre", "Octobre", "Novembre", "Décembre")
 ' I have used VBA.Array so lower bound is zero regardless of option base setting

 Debug.Print Format(Today, "d mmmm yyyy")
 Debug.Print Format(Today, "mmmm d, yyyy")
 Debug.Print Day(Today) & " " & MonthsFrench(Month(Today)) & " " & Year(Today)

 Do While True
   If Recipient = "" Then
     Prompt = "Recipient name?"
   Else
     Prompt = "Last recipient, " & Recipient & " preferred date is "
     Select Case Recipient
       Case "Jesse"
         Prompt = Prompt & Format(Today, "mmmm d, yyyy")
       Case "John"
         Prompt = Prompt & Format(Today, "d mmmm yyyy")
       Case "Jacque"
         Prompt = Prompt & Day(Today) & " " & MonthsFrench(Month(Today)) & " " & Year(Today)
       Case Else
         Prompt = "Last recipient not known"
     End Select
     Prompt = Prompt & vbLf & "Next recipient name?"
   End If
   Recipient = InputBox(Prompt)
   If Recipient = "" Then
     Exit Sub
   End If
 Loop

End Sub

【讨论】:

  • 好的,我明白你的意思,但我真的想知道我是否可以用语言环境设置用英语或法语(或其他任何方式)写月份名称,而不是使用数组解决方法,这就是我现在正在使用。能够将Format(Date, "[$-409]mmmm yyyy") 用于英语和Format(Date, "[$-40C]mmmm yyyy") 用于法语会很好,Excel 允许在单元格的格式中使用 - 但不能在 VBA 中使用
  • @YeO 使用 VB,您可以编写 date1.ToString("d MMMM", CultureInfo.CreateSpecificCulture("xx-yy") 其中“xx-yy”可以是“en-US”或“es-MX”或类似的。您还可以引用特定于语言环境的“短日期”和“长日期”。我知道 VBA 没有等价物。如果您可以访问允许创建插件的 VB 版本,您可以创建一个合适的例程。我使用没有必要功能的免费社区版。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 2018-10-31
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多