Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2014, 10:48   #1
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию изменить язык на языковом панеле windows средствами vba

Здра́вствуйте!

Можно ли изменить язык на языковом панеле windows средствами vba?
roborrr вне форума Ответить с цитированием
Старый 25.06.2014, 11:04   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

у меня раскладка клавиатуры меняется по Ctrl+Shift
Код:
Application.SendKeys ("^+")
- сработал без проблем
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 25.06.2014, 11:17   #3
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
у меня раскладка клавиатуры меняется по Ctrl+Shift
Код:
Application.SendKeys ("^+")
- сработал без проблем
Спасибо, Игорь. а можно ли так:

организовать две кнопки. нажав на кнопку с надписью ru, переключался на русский и нажав на кнопку с надписью en - на английский
roborrr вне форума Ответить с цитированием
Старый 25.06.2014, 11:34   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Пара примеров, подгоняйте:

http://excelvba.ru/code/KeyboardLayout

Код:
Чтобы каждый раз не переключать раскладку вручную - можно воспользоваться WinAPI функцией ActivateKeyboardLayout

Вставьте этот код в модуль листа:


Private Declare Function ActivateKeyboardLayout _
                          Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
Const kb_lay_ru As Long = 68748313, kb_lay_en As Long = 67699721
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Select Case Target.Column    ' в зависимости от номера столбца активной ячеки
        Case 1 To 3, 6    ' для столбцов Имя, Фамилия, Номер машины, Цвет
            ВключитьРусскуюРаскладку
        Case 4, 5:    ' для столбцов Марка авто, Модель
            ВключитьАнглийскуюРаскладку
        Case Else:    ' ничего не делаем (оставляем текущую раскладку)
    End Select
End Sub
 
Sub ВключитьРусскуюРаскладку()
    ' Переключить на русский язык
    x = ActivateKeyboardLayout&(kb_lay_ru, 0)
End Sub
 
Sub ВключитьАнглийскуюРаскладку()
    ' Переключить на английский язык
    x = ActivateKeyboardLayout&(kb_lay_en, 0)
End Sub 
==============================================================


==============================================================
Переключение языков

Const KL_NAMELENGTH As Long = 8 'length of the keyboardbuffer
Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long

Public Sub www()
Dim strLocId As String
strLocId = String(KL_NAMELENGTH, 0)
GetKeyboardLayoutName strLocId
Select Case strLocId
Case "00000419": MsgBox "Ru"
Case "00000409": MsgBox "En"
Case "00000422": MsgBox "Ua"
End Select
End Sub

==============================================================
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 25.06.2014 в 16:30.
Hugo121 вне форума Ответить с цитированием
Старый 25.06.2014, 13:05   #5
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Пара примеров, подгоняйте:
Код:
Sub ВключитьРусскуюРаскладку()
    ' Переключить на русский язык
    x = ActivateKeyboardLayout&(kb_lay_ru, 0)
End Sub
 
Sub ВключитьАнглийскуюРаскладку()
    ' Переключить на английский язык
    x = ActivateKeyboardLayout&(kb_lay_en, 0)
End Sub
эти два кода работают отлично. но у меня на компе установлен и грузинский шрифт, под названием KA. этот язык в винде считается региональным.
когда я назначил кнопке такой код:
Код:

Sub ВключитьгрузинскуюРаскладку()
    
    x = ActivateKeyboardLayout&(kb_lay_ka, 0)
End Sub
то нажав на кнопку, шрифт переключается не прямо на грузинский а на всех установленных языках поочередно
roborrr вне форума Ответить с цитированием
Старый 25.06.2014, 13:14   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Обратите внимание на эту строку кода:
Цитата:
Const kb_lay_ru As Long = 68748313, kb_lay_en As Long = 67699721
вы написали в коде kb_lay_ka - а значение этой константы вы не задали
недостаточно пару букв в коде поменять)))

список кодов для разных языков есть здесь:
http://excelvba.ru/code/KeyboardLayout#comment-133
Но в этом списке нет грузинского, - поищите код для грузинского в интернете
Когда найдете - дополните строку:
Код:
Const kb_lay_ru As Long = 68748313, kb_lay_en As Long = 67699721, kb_lay_ka As Long = ЗдесьКодЯзыка
EducatedFool вне форума Ответить с цитированием
Старый 25.06.2014, 13:18   #7
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

спасибо всем!!!
roborrr вне форума Ответить с цитированием
Старый 25.06.2014, 14:44   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Можно найти нужный код клавиатуры используя эти коды - задать вручную грузинский и узнать возвращаемый код с помощью GetKeyboardLayoutName.
Затем в цикле (вероятно от английского и вверх) менять раскладки с помощью ActivateKeyboardLayout пока не получим нужный ответ.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 25.06.2014, 16:08   #9
roborrr
Математик
Форумчанин
 
Регистрация: 27.02.2011
Сообщений: 123
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Можно найти нужный код клавиатуры используя эти коды - задать вручную грузинский и узнать возвращаемый код с помощью GetKeyboardLayoutName.
Затем в цикле (вероятно от английского и вверх) менять раскладки с помощью ActivateKeyboardLayout пока не получим нужный ответ.
Спасибо Hugo121, наконец узнал я код родного языка.
roborrr вне форума Ответить с цитированием
Старый 25.06.2014, 16:22   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Так и сделали? Я сам не пробовал, не актуально....
И кстати - так напишите код, поможете землякам.

Извиняюсь перед Игорем что не указал чей код - у меня в загашнике лежит без ссылки на автора. Давно лежит... возможно где-то с мая 2011 года и лежит - когда у Игоря код появился.
Сейчас добавил ссылку на источник
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 25.06.2014 в 16:29.
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить пароль, заданный средствами VBA lion78 Microsoft Office Excel 10 30.03.2013 19:38
Изменить название кнопки на панеле инструментов agregator Microsoft Office Excel 2 11.07.2012 11:00
Как средствами Delphi изменить IP на компе? Ky3Heu, Работа с сетью в Delphi 1 10.08.2009 19:57
Определить язык текста средствами VBA Luckyrich Microsoft Office Word 4 30.05.2009 11:03
Запуск какой либо Windows-программы из Excel средствами VBA kovalevskivf Microsoft Office Excel 3 21.05.2009 15:14