Страницы: 1
RSS
Автоматическая смена раскладки клавиатуры на английскую при открытии файла.
 
Здравствуйте, прошу подсказать, как в макросе Auto_Open() прописать автоматическую смену раскладки клавиатуры на английскую при открытии файла, если раскладка до открытия файла была русской?
Я пробовал с помощью Application.SendKeys ("%+" ;)   , но в этом случае если раскладка до открытия файла была английской, то при его открытии она становится русской. А нужно, чтобы если раскладка английская, то оставалась таковой и не менялась.
То есть задача состоит в том, чтобы после открытия файла раскладка клавиатуры в любом случае была английская, независимо от предшествующей раскладки.
Изменено: paylevan - 16.11.2013 00:37:25
 
А если поискать готовое решение на просторах интернета?
http://excelvba.ru/code/KeyboardLayout

Пример использования:
Код
sub Auto_Open()
ВключитьАнглийскуюРаскладку
end sub
 
Спасибо за ссылку. Я, естественно, искал решение до того, как задать вопрос. И уже много раз переходил по указанной Вами ссылке. Но не смог разобраться с предложенным там решением. Возможно, есть более короткое решение в одну строку?

То есть в моём случае не стоит задача смены языка при смене ячеек. А лишь необходимо, чтобы при открытии файла раскладка была гарантированно английской.
Изменено: paylevan - 15.11.2013 22:32:01
 
На блюдце
Код
Private Declare Function ActivateKeyboardLayout _
                           Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
Private Sub Workbook_Open()
x = ActivateKeyboardLayout&(67699721, 0)
End Sub 
 
Теперь напишут, что не работает при открытии :-)
paylevan, почитайте статью: Что такое модуль? Какие бывают модули?
код, приведенный Olelucoye необходимо вставить в модуль ЭтаКнига, а если использовать код от EducatedFool - то в стандартный модуль. Разницы не будет. Правда, парни из Microsoft говорят, что использовать процедуру Auto_Open не рекомендуется. Хотя тут надо точно знать в каких версиях Excel планируется использовать. Ведь до 2000 не было событийных процедур листа и книги...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
На данный момент, самым коротким и красивым решением оказалось вот это:
Код
Private Declare Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As Long, ByVal flags As Long) As Long
Private Sub Workbook_Open()
x = ActivateKeyboardLayout&(67699721, 0)
End Sub
Спасибо большое за комментарии.
 
Цитата
Правда, парни из Microsoft говорят, что использовать процедуру Auto_Open не рекомендуется
Вряд ли они отключат эту возможность
Я использую эту процедуру в своих программах, которые установлены на тысячах компов, с Excel от 2002 до 2013
У всех все четко работает.
Так что это тот случай, когда можно не прислушиваться к парням из майкрософта)
Изменено: EducatedFool - 16.11.2013 13:12:03
 
Если выдернуть из контекста  :)
Цитата

Вряд ли они отключат эту возможность. Я использую эту процедуру в своих программах, которые установлены на тысячах компов
 
Тут есть еще небольшая особенность - auto_open не срабатывает при программном открытии файлов. А событие в модуле книги срабатывает, если не отключить отслеживание событий. Это тоже надо принимать во внимание.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Читают тему
Наверх