Смена раскладки клавиатуры в VBA Excel с РУС на ENG и наоборот с помощью функций Windows API. Автоматическое изменение раскладки в пределах одной таблицы.
Смена раскладки клавиатуры
Поочередная смена раскладки
Для организации поочередной смены раскладки клавиатуры с РУС на ENG и наоборот, имитирующей нажатие сочетания клавиш (Win + Space, Alt + Shift, Ctrl + Shift — в зависимости от ваших настроек), можно использовать функцию Windows API ActivateKeyboardLayout
, объявленную в разделе Declarations стандартного модуля:
Declare PtrSafe Function ActivateKeyboardLayout Lib «user32» (ByVal HKL As LongPtr, ByVal flags As LongPtr) As LongPtr |
Код VBA Excel для поочередного изменения раскладки клавиатуры:
Sub ToEngOrRus() Call ActivateKeyboardLayout(0, 0) End Sub |
Заданная смена раскладки
Для смены раскладки клавиатуры из кода VBA Excel с указанием устанавливаемого языка используется функция Windows API LoadKeyboardLayout
, объявленная в разделе Declarations стандартного модуля:
Declare PtrSafe Function LoadKeyboardLayout Lib «user32» Alias «LoadKeyboardLayoutA» (ByVal pwszKLID As String, ByVal flags As LongPtr) As LongPtr |
Код VBA Excel для изменения раскладки клавиатуры с указанием устанавливаемого языка:
‘Переключение на английскую раскладку Sub ToEng() Call LoadKeyboardLayout(«00000409», &H1) End Sub ‘Переключение на русскую раскладку Sub ToRus() Call LoadKeyboardLayout(«00000419», &H1) End Sub |
"00000409"
— код английской раскладки;
"00000419"
— код русской раскладки.
Определение текущей раскладки
Получить значение текущей раскладки можно с помощью функции Windows API GetKeyboardLayoutName
, объявленной в разделе Declarations стандартного модуля:
Declare PtrSafe Function GetKeyboardLayoutName Lib «user32» Alias «GetKeyboardLayoutNameA» (ByVal pwszKLID As String) As LongPtr |
Код определения текущей раскладки для вариантов РУС и ENG:
Sub KeyboardLayoutName() Dim klName As String * 8 GetKeyboardLayoutName klName If klName = «00000409» Then MsgBox «Текущая раскладка — Английская!» ElseIf klName = «00000419» Then MsgBox «Текущая раскладка — Русская!» Else MsgBox «Текущая раскладка — не Русская и не Английская!» End If End Sub |
Переменная klName объявлена как строка фиксированной длины. Запуск процедуры с обычной переменной может вызывать ошибку, закрывающую приложение. Так происходит в моей версии Excel 2016.
Смена раскладки в таблице
Автоматическое изменение раскладки в пределах одной таблицы при переходе между ячейками.
Для автоматической смены раскладки при переходе между ячейками разных диапазонов одного рабочего листа будем использовать функцию Windows API LoadKeyboardLayout
, объявленную в разделе Declarations стандартного модуля:
Declare PtrSafe Function LoadKeyboardLayout Lib «user32» Alias «LoadKeyboardLayoutA» (ByVal pwszKLID As String, ByVal flags As LongPtr) As LongPtr |
Допустим, что в 5 и 7 столбцах нашей таблицы находятся данные на английском языке или, попросту, требующие ввод латиницей. Чтобы не переключать каждый раз раскладку клавиатуры вручную, разместим в модуле нужного листа следующий код VBA Excel:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Select Case Target.Column Case 5, 7 Call Module3.LoadKeyboardLayout(«00000409», &H1) Case Else: Call Module3.LoadKeyboardLayout(«00000419», &H1) End Select End Sub |
Теперь при переходе к ячейкам 5 и 7 столбцов раскладка клавиатуры автоматически меняется на ENG, а при уходе с них — на РУС.
Module3 — это стандартный модуль, в котором размещена функция Windows API LoadKeyboardLayout
.
1 / 1 / 0 Регистрация: 07.11.2013 Сообщений: 4 |
|
1 |
|
03.08.2016, 13:49. Показов 27598. Ответов 9
Здравствуйте, подскажите, где меняется язык интерфейса VBA? Вместо английского меню отображаются иероглифы Миниатюры
__________________
0 |
190 / 59 / 20 Регистрация: 16.07.2013 Сообщений: 234 |
|
03.08.2016, 13:56 |
2 |
В самом экселе попробуйте посмотреть Миниатюры
0 |
1 / 1 / 0 Регистрация: 07.11.2013 Сообщений: 4 |
|
03.08.2016, 14:18 [ТС] |
3 |
спасибо, языки указаны верно. проблема появилась после установки VBA для автокада, в актокаде меню отображается нормально, в word и excel -иероглифы Миниатюры
1 |
2 / 2 / 0 Регистрация: 25.05.2016 Сообщений: 1 |
|
14.11.2016, 12:44 |
4 |
Меняем язык, перезапускаем Excel.. Миниатюры
2 |
1 / 1 / 0 Регистрация: 26.03.2017 Сообщений: 1 |
|
26.03.2017, 17:42 |
5 |
Большое спасибо!!! Помогло!
1 |
0 / 0 / 0 Регистрация: 16.03.2020 Сообщений: 1 |
|
06.11.2020, 22:08 |
6 |
Большое спасибо
0 |
0 / 0 / 0 Регистрация: 26.05.2016 Сообщений: 14 |
|
16.02.2021, 11:52 |
7 |
А руссифицировать можно как нибудь?
0 |
0 / 0 / 0 Регистрация: 18.06.2021 Сообщений: 1 |
|
21.06.2021, 09:58 |
8 |
К сожалению не помогло. Может не хватает шрифтов?
0 |
ᴁ® 2917 / 1623 / 340 Регистрация: 13.12.2016 Сообщений: 5,490 Записей в блоге: 3 |
|
21.06.2021, 11:31 |
9 |
К сожалению не помогло. Может не хватает шрифтов? Тема 16 года. Если у вас проблема, создайте новую тему с описанием. (тоже автокад устанавливали?)
0 |
0 / 0 / 0 Регистрация: 08.09.2022 Сообщений: 1 |
|
08.09.2022, 12:06 |
10 |
Мне помогло! Миниатюры
0 |
Ex2016″Разработчик»-«Visual Basic»всё на китайском |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |