1

我有一个宏,它创建一个 excel 公式, range("A2").formula="=TEXT(A1,""YYYYMMDD"")" 它适用于我的 US-EN 版本,但是当我尝试在 FR-FR 版本上运行它时出现问题我需要调整公式以 range("A2").formula="=TEXT(A1,""AAAAMMJJ"")" 使其在 -FR-FR 上正常工作版本,但这不再适用于我的 US-En 版本。

关于如何管理这个的任何想法?

我对 CELL 和 INFO 函数有同样的问题,它们使用与语言相关的字符串参数,但在通过 range 函数的公式属性以编程方式创建公式时无法正确管理。

是否有一个我可以测试并相应地调整公式的属性,或者更好的是有没有办法自动翻译字符串参数?

4

2 回答 2

3

您可以通过该Application.International方法访问本地区域设置。这可用于将您的 US_EN 代码转换为本地设置代码。

像这样的东西

Function MakeDateCodeLocal(ByVal Code As String)
    Dim Y As String
    Dim M As String
    Dim D As String
    
    Y = Application.International(xlYearCode)
    M = Application.International(xlMonthCode)
    D = Application.International(xlDayCode)
    ' Add more codes if you need them
    
    Code = Replace$(Code, "Y", Y, , , vbTextCompare)
    Code = Replace$(Code, "M", M, , , vbTextCompare)
    Code = Replace$(Code, "D", D, , , vbTextCompare)
    MakeDateCodeLocal = Code
End Function

然后像这样使用它

range("FormulaRange").formula="=TEXT(A1, " & MakeDateCodeLocal("YYYYMMDD") & ")"
于 2020-09-01T00:49:22.350 回答
1

无法正确测试它,因为我只有一个带有西班牙语的 Excel 版本。

据我所知,您不能让 Excel 自动翻译字符串参数。

但该Application对象包含语言设置。

MsgBox "Install Language - " & _
 Application.LanguageSettings.LanguageID(msoLanguageIDInstall) & vbNewLine & _
 "User Interface Language - " & _
 Application.LanguageSettings.LanguageID(msoLanguageIDUI) & vbNewLine & _
 "Help Language - " & _
 Application.LanguageSettings.LanguageID(msoLanguageIDHelp)

因此,在您的 VBA 代码中,检查msoLanguageIDUI并根据值使用一个或另一个字符串参数。

所有msoLanguageIDUI都在这里列出: MsoLanguageID 枚举(Office)

因此,您可以将其与您的需求结合起来,根据 FR 或 US-EN 选择正确的公式:

Sub TEST()
Dim LanguageID As Integer
LanguageID = Application.LanguageSettings.LanguageID(msoLanguageIDUI)

Range("A1").Formula = CHOOSE_FORMULA(LanguageID)

End Sub


Function CHOOSE_FORMULA(ByVal vLanguage As Integer) As String

Select Case vLanguage
    Case 1033 'The English US language
        CHOOSE_FORMULA = "=TEXT(A1,""YYYYMMDD"")"
    Case 1036 'The French language
        CHOOSE_FORMULA = "=TEXT(A1,""AAAAMMJJ"")"
End Select
End Function
于 2020-09-01T00:59:33.887 回答