Изменить региональные настройки с польского на американские окна 10 - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь использовать этот код:

#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

по ссылке:

Изменить формат региона на другой язык с VBA

iЯ ищу подобное решение, но это не работает.Я попытался изменить региональные настройки на настройки США и вернуть польские региональные настройки (окна по умолчанию).

Польские настройки из GetUserDefaultLCID = 1045, US = 1033, но макрос работает без результатов.(без ошибок, без изменений).Вид SetThreadLocale не работает ...

Пожалуйста, помогите, что может быть не так, Best, Jacek

Я попытался использовать вместо "fr-CA" "pl-PL" и назначить userLocale= 1045, когда я использовал Windows с региональными настройками США, но не работал.

Цель состоит в том, чтобы этот макрос работал в Windows 10.

1 Ответ

0 голосов
/ 05 февраля 2019

Обратите внимание, что If SetThreadLocale(frCa) Then переключается на frCa, но через 1 строку (после комментариев) вы переключаете назад на то, что было раньше с SetThreadLocale userLocale (если вы читаете исходную ветку, с которой вы связались, это говоритты именно это).

Таким образом, изменение происходит только в течение короткого промежутка времени между этими двумя операторами.

Так что либо поместите ваш код, который должен работать, в измененную локаль между:

If SetThreadLocale(frCa) Then
    'put your code that should run in polish here

    SetThreadLocale userLocale
End If

или для постоянного изменения языкового стандарта вместо приведенного выше используйте следующее:

SetThreadLocale frCa
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...