【问题标题】:Change region format to another language with VBA使用 VBA 将区域格式更改为另一种语言
【发布时间】:2018-08-01 09:36:49
【问题描述】:

我需要将区域格式更改为“法语(加拿大)”,以便datevalue 接受法语月份(例如 05 Mars、12 Avril 等),然后 在 VBA 代码中将其恢复为“英语(加拿大)”

我希望它没有那么复杂,并且有一个可以使用 VBA 修改此设置的写入属性。

到目前为止,我找到了 Application.International(xlCountrySetting) 但它只是一个读取属性。

这是我希望更改的相关设置:

谢谢

【问题讨论】:

  • 您是否尝试过录制宏,更改设置,然后查看录制的宏?
  • @3-14159265358979323846264 宏是否可以在excel之外记录程序?据我所知,他们不能。
  • 您不能使用 VBA“直接”执行此操作,但您可以使用 VBA 调用 Windows API 进行修改,或者您可以运行 .reg 文件来更改注册表。
  • @RonRosenfeld 太糟糕了,用 VBA 是不可能的。尽管 Windows API 和 .regs 很有趣,但我认为仅仅为了更改区域格式而学习它们并不值得:手动完成这个过程需要 5 秒。
  • 他们不能,但我觉得您应该手动转换这些问题值,以便它们确认为所需的值,而不是更改区域....对不起,我认为这是一个 Excel 设置!

标签: vba excel


【解决方案1】:

正如 cmets 中所指出的,您可以通过几个简单的 Windows API 调用来做到这一点。我建议不要假设机器当前设置为“英语(加拿大)”,而是使用 GetUserDefaultLCID 测试当前设置,然后在完成后将其设置回该设置。

#If VBA7 Then
    Private Declare PtrSafe Function SetThreadLocale Lib "kernel32" _
        (ByVal Locale As Long) As Boolean
    Private Declare PtrSafe Function GetUserDefaultLCID Lib "kernel32" () As Long
    Private Declare PtrSafe Function LocaleNameToLCID Lib "kernel32" _
        (ByVal lpName As LongPtr, dwFlags As Long) As Long
#Else
    Private Declare Function SetThreadLocale Lib "kernel32" (ByVal Locale As Long) As Boolean
    Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
    Private Declare Function LocaleNameToLCID Lib "kernel32" _
       (ByVal lpName As LongPtr, dwFlags As Long) As Long
#End If

Private Sub Test()
    'Get the locale identifier for French (Canada)
    Dim frCa As Long
    frCa = LocaleNameToLCID(StrPtr("fr-CA"), 0)
    'Make sure there function succeeded.
    If result = 0 Then
        'Cache the current locale
        Dim userLocale As Long
        userLocale = GetUserDefaultLCID
        'Switch to French (Canada)
        If SetThreadLocale(frCa) Then
            'en français
            '...
            'switch back
            SetThreadLocale userLocale
        End If
    End If
End Sub

相关功能的文档链接如下:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 2018-02-15
    • 2013-03-14
    相关资源
    最近更新 更多