Как в excel определить язык

 

Всем привет!

Есть ли способ определения языка строки средствами VBA?
Например в коде есть 2 строки, которые нужно сравнить по языку (одинаковы ли языки двух строк)
В файле примере 2 ячейки для сравнения. В первой ячейке первая буква английская, вторая вся на русском.

Всем большое спасибо!

Изменено: vikttur26.08.2021 12:02:06

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

Проверить коды первых символов

Изменено: vikttur26.08.2021 12:03:38

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#3

26.08.2021 12:24:20

artemkau88, здравствуйте

Цитата
artemkau88: определения языка строки средствами VBA
Цитата
vikttur: Проверить коды первых символов

Проверка первого символа на латиницу

Изменено: Jack Famous26.08.2021 12:32:02

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Jack Famous, vikttur, большое спасибо!

 

No Name

Пользователь

Сообщений: 41
Регистрация: 27.08.2021

#5

27.08.2021 15:34:14

В вашем примере следующий код

Код
debug.Print range("A1").Value = range("B1").Value

Выведет false, ибо xl внешним сходством символов не обманешь. Если вам нужно лишь понимать, что значения неидентичны, то этого выражения достаточно. Если же вам именно нужно узнать язык, то необходимо по диапазонно искать совпадения, как сделал Jack Famous, только для всех возможных диапазонов символов. Можно ещё попробовать в google translate отправить, он сам определит язык (правда этот вариант чисто поржать)

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#6

27.08.2021 16:00:23

Цитата
No Name: внешним сходством символов не обманешь

можно заменить латиницу на визуально похожую кириллицу и сравнивать как обычно — я на работе постоянно так делаю, потому что латинская СИ и кириллическая ЭС даже на одной клавише находятся (спасибо оленям-внедренцам) и человек, удаляя неправильно напечатанное (в другой раскладке), как правило СИ не удаляет, потому что «она нормальная»

Здесь

есть форма, которая позволяет быстро и удобно посмотреть коды всех символов активной ячейки

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

sokol92

Пользователь

Сообщений: 4445
Регистрация: 10.09.2017

См.

эту статью

и комментарии к ней.

 

Изменено: artemkau8827.08.2021 16:49:18

 

sokol92

Пользователь

Сообщений: 4445
Регистрация: 10.09.2017

#9

27.08.2021 17:36:11

Рекомендую использовать указанный по ссылке подход в следующей редакции.

Код
' Раскрашивает в Selection в красный цвет буквы, не относящиеся к русскому алфавиту
Sub ShowNotRussian()
  Dim r As Range, i As Long, t As String, v
  Application.ScreenUpdating = False
  For Each r In Intersect(Selection, Selection.Parent.UsedRange).Cells
    v = r.Value
    If VarType(v) = vbString Then
      For i = 1 To Len(v)
        t = Mid(v, i, 1)
        If LCase(t) <> UCase(t) And Not LCase(t) Like "[а-яё]" Then r.Characters(Start:=i, Length:=1).Font.ColorIndex = 3
      Next i
    End If
  Next r
  Application.ScreenUpdating = True
End Sub

Аналогично для латыни.

Далее можно использовать автофильтр по цвету текста и выделить все опечaтки (кстати, есть в этом тексте).

Изменено: sokol9227.08.2021 17:44:43

Владимир

 

БМВ

Модератор

Сообщений: 21380
Регистрация: 28.12.2016

Excel 2013, 2016

#10

27.08.2021 17:46:47

Off

Цитата
Jack Famous написал:
(спасибо оленям-внедренцам)

Э, Э? клавиатуру печатной машинки придумали не просто так, а выверенная схематика по частоте употребления символов и прочего. Двуязычных тогда не было, а на печати все равно  латинская СИ и кириллическая ЭС выглядят одинаково. А переделывать — это как в Англии сейчас ввести левый руль.

Перевели летчика в  эскадрилию  гидропаланов. Первsй полет, все нормально, выполнил задание , возвращается на базу и по пути начинает садится на обычныq аэродром. Штурман и второй пилот с воплями ты куда ???? .  Все обошлось подняли в воздух, долетели до водоема, сели. Пилот вышел из кабины , обернулся на бледных сослуживцев, «Извините мужики , сила привычки!»  и спрыгнул с крыла …. .

По вопросам из тем форума, личку не читаю.

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#11

27.08.2021 17:51:34

sokol92, приветствую!

Позанудствую по-дружески

БМВ, что там когда и как было меня мало волнует. От того, что это обосновано, ошибок ввода меньше не стало, сдвинуть или переставить можно легко — большинству плевать, так как машинистки со своим «слепым десятипальцевым методом» никому уже лет 20 как не нужны (привет распознавание голоса в текст)
А анекдот хороший, спасибо  :)

UPD

Изменено: Jack Famous27.08.2021 18:12:08

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

БМВ

Модератор

Сообщений: 21380
Регистрация: 28.12.2016

Excel 2013, 2016

#12

27.08.2021 18:29:52

Off
В свое время литер отличались, да и сейчас можно найти шрифты, которые дают различие, но системные к ним не относятся, а зря. но   ! i l |  могут приносить чуть меньше хлопот,  O и ноль, который больше не перечеркивается . Но С конечно лидер, расположенный на одной кнопке — тут спору нет.

Цитата
Jack Famous написал:
большинству плевать, так как машинистки со своим «слепым десятипальцевым методом» никому уже лет 20 как не нужны (привет распознавание голоса в текст)

оъ как не прав.  Конечно все шагнудо вперед, но не на столько , чтоб исключить ошибки.  Этой

записи лет 15 наверно

, и по реакции оператора это не инсценировка.

По вопросам из тем форума, личку не читаю.

 

sokol92

Пользователь

Сообщений: 4445
Регистрация: 10.09.2017

Здравствуйте, Алексей! Макрос из #9 выделяет цветом все буквы, не относящиеся к русскому алфавиту. Кроме латыни, в Unicode есть еще много-много букв из разных алфавитов (греческие, расширенная латынь,  арабские и т.д.).

 

No Name

Пользователь

Сообщений: 41
Регистрация: 27.08.2021

#14

27.08.2021 18:38:19

Цитата
БМВ написал:
 ! i l |

Вот тут приколы начинаются, если кодировку с кириллицы на юникод сменить (или другие варианты). I вполне запросто становится |. Через раз с этим сталкиваюсь при импорте данных из txt в mysql. Та ещё головная боль

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#15

27.08.2021 19:17:30

Цитата
artemkau88 написал:
Способы определения языка строки VBA

строки
Pronto
Achtung
это один язык? (как по мне это итальянский и немецкий)
а что вы тут определяете?
а фраза:
«McDonalds у Києві репрезентовано за 42 різними адресами»
это какой язык?

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#16

27.08.2021 21:49:45

Цитата
sokol92: все буквы, не относящиеся к русскому алфавиту
Код
If String like "*[!ЁёА-я]*"

изи)

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#17

27.08.2021 22:06:32

Цитата
Jack Famous написал:
все буквы, не относящиеся к русскому алфавиту

))
пательня
все буквы относятся к русскому алфавиту? а язык какой? (и что слово значит)
какой язык и как вы пытаетесь помочь определить автору? о каких языках речь?

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

Алексей, буквы См и ЭС  на одной клавише не только на клавиатурах ПК расположены: на телетайпах (а они двуязычные) картина аналогичная. И, как правильно написал Миша, это сделали не из вредности: изначально во главу угла ставилась частота использования. Но этого оказалось мало: при росте скорости печати (в те времена) столкнулись с проблемой, что соседние рычаги печатной машинки при большой скорости набора цеплялись друг с другом и некоторые буквы пришлось разносить подальше друг от друга, пытаясь найти компромисс. Так что не «с потолка» появилась такая раскладка. А потом сработала преемственность: человеку уже было привычно искать нужный символ на клавиатуре ПК в том месте, где он был на печатной машинке и на телетайпе. Кстати, на первых ЭВМ роль клавиатуры выполнял именно телетайп. Он же выполнял роль принтера. )
Алексей, ну не знали в те далёкие времена, что тебе будет напревать )) Ты уж не серчай на них — люди старались  :)

Изменено: Юрий М28.08.2021 00:04:01

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

Юр, а как ты думаешь, много ли людей, привычных к машинке, работает на клавиатуре? Из моих знакомых — ни одного. А проблемы создаёт буквально на ровном месте

Смысла обсуждать «правильность» не вижу — если не нравится, то можно купить другую клавиатуру, они есть. А всех за другую клавиатуру не посадишь, а значит проверять всё-равно надо
За историю наследования спасибо))

Изменено: Jack Famous29.08.2021 10:56:04

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

#20

29.08.2021 11:00:39

Цитата
Jack Famous написал:
Из моих знакомых — ни одного

Теперь есть один )

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#21

29.08.2021 11:33:02

Цитата
Ігор Гончаренко написал:
пательня

:) сковородка, язык украинский.
патэльня, язык беларусский значение тоже
:)

Спасибо

  • Найти латиницу в Excel – функция
  • Найти кириллицу в Excel – функция
  • Как найти прописные буквы
    • Функция поиска прописных символов латиницы
    • Функция поиска прописных кириллических символов
    • Функция поиска любых прописных символов
  • Функции “Найти латиницу” и “Найти кириллицу” с помощью UDF
  • Найти латинские буквы в 2 клика
  • Найти слова, содержащие и кириллицу, и латиницу
    • С помощью регулярных выражений
    • В две итерации
  • Кейсы дальнейшего взаимодействия с данными
    • Удалить
    • Извлечь
    • Изменить регистр
    • Заменить символы

Важно: поскольку термин “найти” часто в сознании людей предполагает “найти и извлечь”, сразу оговоримся, что ниже именно булевая интерпретация поиска, иначе говоря, результата два – нашёл или не нашёл. Похожая, но все же другая задача – извлечь символы латиницы.

Текст, содержащий латиницу помимо кириллицы — довольно частое явление, и выявить, в какой раскладке текст, не всегда возможно визуально. Начертание многих символов в обеих раскладках идентично.

Когда нужно просто глазами обнаружить латиницу среди кириллических символов или наоборот, кириллицу в английском тексте, есть очень простое решение – использование неклассических шрифтов в Excel.

Например, Dubai Light сделает латиницу тоньше, Dubai Medium – жирнее кириллицы, Microsoft Himalaya – ниже, а Ink Free – выделит ее курсивом.

Но когда исходных данных много, важно не просто видеть, но и иметь возможность отфильтровать или отсортировать такие ячейки. Вариантов упростить и ускорить решение задачи несколько.

Задача поиска букв латинского алфавита в тексте – одна из нетривиальных в Excel, как и поиска любой длинной последовательности единичных символов. Как и в случае с поиском цифр, при обычном поиске придется перебирать все латинские буквы – а их 26, что ещё больше, чем цифр.

формула для поиска латиницы в Excel
Обнаружить латиницу – желаемый результат

Составная формула массива пригодится в случаях, когда не хочется или нет возможности пользоваться макросами или пользовательскими функциями (UDF):

=СЧЁТ(ПОИСК({"a":"b":"c":"d":"e":"f":"g":"h":"i":"j":"k":"l":"m":"n":"o":"p":"q":"r":"s":"t":"u":"v":"w":"x":"y":"z"};A1))>0

Здесь A1 — ячейка, которую мы хотим “проверить” на наличие в ней латиницы. Функция возвращает “ИСТИНА” или “ЛОЖЬ”. Важно отметить, что функция “ПОИСК” не является регистрозависимой, поэтому позволяет найти буквы в любом регистре.

Можно ли диапазон букв выразить иным способом? Да, формулой массива, а помогут в этом функция СИМВОЛ и функция СТРОКА:

{=СЧЁТ(ПОИСК(СИМВОЛ(СТРОКА(65:90));A1))>0}

Отличие этой формулы массива от предыдущей – её нужно вводить без фигурных скобок, они появятся при вводе формулы сочетанием Ctrl + Shift + Enter (вместо обычного Enter). В формуле выше, где явно прописаны все буквы, фигурные скобки вводятся вручную — это явное указание строкового массива.

Найти кириллицу в Excel – функция

Как вы, наверное, догадались, найти кириллицу в тексте можно аналогичным путем:

=СЧЁТ(ПОИСК({"а":"б":"в":"г":"д":"е":"ё":"ж":"з":"и":"й":"к":"л":"м":"н":"о":"п":"р":"с":"т":"у":"ф":"х":"ц":"ч":"ш":"щ":"ъ":"ы":"ь":"э":"ю":"я"};A1))>0

Или формулой массива с функцией СИМВОЛ:

{=СЧЁТ(ПОИСК(СИМВОЛ(СТРОКА(192:223));A1))>0}

Формула массива будет работать корректно, если языком системы для non-Unicode программ выбран русский.

Есть небольшая разница в двух этих формулах – вторая в отличие от первой использует 32 буквы, т.к. буква Ё не входит в диапазон символов.

Как найти прописные буквы

В отличие от “ПОИСК”, “НАЙТИ” – функция регистрозависимая, что позволяет найти буквы в том регистре, в котором они перечислены.

Функция поиска прописных символов латиницы

=СЧЁТ(НАЙТИ({"A":"B":"C":"D":"E":"F":"G":"H":"I":"J":"K":"L":"M":"N":"O":"P":"Q":"R":"S":"T":"U":"V":"W":"X":"Y":"Z"};A1))>0

Функция поиска прописных кириллических символов

=СЧЁТ(НАЙТИ({"А":"Б":"В":"Г":"Д":"Е":"Ё":"Ж":"З":"И":"Й":"К":"Л":"М":"Н":"О":"П":"Р":"С":"Т":"У":"Ф":"Х":"Ц":"Ч":"Ш":"Щ":"Ъ":"Ы":"Ь":"Э":"Ю":"Я"};A1))>0

Функция поиска любых прописных символов

Поможет вам найти в ячейке символы и кириллицы, и латиницы, если они написаны заглавными буквами.

=СЧЁТ(НАЙТИ({"А":"Б":"В":"Г":"Д":"Е":"Ё":"Ж":"З":"И":"Й":"К":"Л":"М":"Н":"О":"П":"Р":"С":"Т":"У":"Ф":"Х":"Ц":"Ч":"Ш":"Щ":"Ъ":"Ы":"Ь":"Э":"Ю":"Я":"A":"B":"C":"D":"E":"F":"G":"H":"I":"J":"K":"L":"M":"N":"O":"P":"Q":"R":"S":"T":"U":"V":"W":"X":"Y":"Z"};A1))>0

Для поиска цифр в ячейке можно использовать такой же синтаксис.

Функции “Найти латиницу” и “Найти кириллицу” с помощью UDF

UDF (User-defined function, пользовательская функция) – тем, кто часто использует функции такого плана, помогут упростить синтаксис на листе, т.к. содержат калькуляции в коде.

Function найтиЛатиницу(txt As String) As Boolean 
найтиЛатиницу = txt Like "*[A-z]*" 
End Function
Function найтиКириллицу(txt As String) As Boolean 
найтиКириллицу= txt Like "*[А-яЁё]*" 
End Function

Найти латинские буквы в 2 клика

Максимально быстрый способ проверки на наличие латиницы в Excel доступен пользователям !SEMTools.
Порядок действий: скопировать диапазон, выделить скопированное и вызвать макрос в меню «Найти символы» группы «ОБНАРУЖИТЬ».

Найти латиницу в ячейках Excel без использования формул, с помощью надстройки !SEMTools

Найти слова, содержащие и кириллицу, и латиницу

Иногда простой поиск в ячейке латиницы и кириллицы не решает проблему, т.к. в ячейке изначально подразумевается наличие обоих видов символов. Например, “автомобиль Tоyоta”, “холодильник Siеmеns”. В двух этих примерах специально вставлены буквы из другого алфавита: Tоyоta содержит кириллическую “о”, а Siеmеns – кириллическую “e”. Начертание этих символов идентичное, но вот для роботов это совершенно разные символы.

Как с помощью Excel проверить отличие в написании букв на латинице или кириллице в отдельных словах? Формулы выше не отличат фразы, написанные корректно, от фраз, написанных некорректно, так как отдадут “ИСТИНА” всем фразам при проверке на кириллицу и латиницу.

Решить проблему можно, если искать по конкретным словам! В !SEMTools есть два решения этой задачи:

С помощью регулярных выражений

Процедура находится в меню “ОБНАРУЖИТЬ” – “Слова” – “По паттерну”. Паттерн REGEX позволяет решить задачу в один заход, т.к. в нем есть оператор “ИЛИ”.
Данное выражение означает, что нужно найти слова, в которых или после кириллического символа идет символ латиницы, или наоборот. При этом между символами могут быть внутри слова любые другие символы (цифры, дефисы и любые другие, кроме пробела).

([a-zA-Z].*[а-яА-ЯёЁ]|[а-яА-ЯёЁ].*[a-zA-Z])

Важно понимать, что сам паттерн применим к любой строке вне зависимости от количества слов в ней, но в рамках указанной процедуры !SEMTools применяется к отдельным словам.

Применяем регулярное выражение из этой статьи для поиска слов, содержащих кириллицу и латиницу

В две итерации

Данный метод совершенно логичен, но требует чуть больше времени. Нужно просто сначала извлечь слова, содержащие латиницу, а потом, уже среди извлеченных этим способом, искать слова, содержащие кириллицу.

Кейсы дальнейшего взаимодействия с данными

Найти слова, содержащие кириллицу, латиницу или оба вида символов одновременно, – только полдела. За этапом их обнаружения зачастую следуют дальнейшие действия.

Удалить

Иногда нужно целиком удалить слова, содержащие латиницу. Дело в том, что в них могут находиться другие символы – цифры, кириллица, дефисы и другие знаки. Они останутся, если удалить из текста латиницу и ничего больше.

Извлечь

Можно захотеть извлечь латиницу. В !SEMTools это можно делать с помощью регулярных выражений, в том числе извлечь слова, содержащие латиницу, чтобы посчитать количество слов и посмотреть на их структуру. Из каталога товаров, например, быстро извлекать бренды, написанные на английском языке.

Изменить регистр

Бывают ситуации, когда слова, содержащие латиницу, имеет смысл сделать с заглавной буквы — это касается все тех же иностранных брендов.

Заменить символы

И, наконец, бывают ситуации, когда нужно заменить кириллицу на латиницу – но и здесь возможны вариации: можно транслитерировать, сменить раскладку или заменить символы на похожие с ними на другом языке. Подробнее про последний кейс: заменить русские буквы на английские и наоборот.

Про каждый из этих кейсов можно почитать с соответствующем разделе сайта, в надстройке присутствуют макросы для быстрой обработки подобных ситуаций.

Часто сталкиваетесь с этой или похожими задачами при работе в Excel?
!SEMTools поможет решить их быстро и легко!

It is a petty that you cannot request the language of the user. It is not only needed in date-format functions, many times we need to know the languange in indirect-functions as well. All indirect parts of formulas (which are used between quotes) is fixed text, while formulas are automatically ‘translated’ to the users language. For parts in a formula which is between quotes (like a format of a date), excel has no solution.
So we cannot request the language, however, from Excel 2016 and above, there is a possibility to get a formula in text. The English name of that function is FORMULATEXT (please find the translated function name of your own language).
This means that we can use this function to create our own way to detect a language. If you wnat to create an international sheet, it is a lot of work, but of you only need to support 2 or 3 languages, it can be used.

Place in Cell A1 the formula:
=IF(A2>20,A2,A2)
This formula doesn’t do anything.

Place in Cell A2 the formula:
=MID(LEFT(FORMULATEXT(A1),FIND(«(«,FORMULATEXT(V2))-1),2,20)

Now we know the language. If cell A2=»IF», the language is English, if it is «WENN» it is German, if it is «COMME» it is French and if it is «ALS» it is Dutch, etc.

Be aware that if you have users with older versions of excel, this function isn’t available and you cannot detect the language (at least not in this way). I added an ISERROR to this. In case of an error (older versions), I only support Dutch (in my case :) )

20 / 6 / 1

Регистрация: 06.03.2010

Сообщений: 74

1

Определить язык приложения

21.05.2010, 08:41. Показов 3202. Ответов 2


Студворк — интернет-сервис помощи студентам

Подскажите, пожалуйста, как определить текущий язык в Экселе.Нужно определять текущий язык ввода до того, как какие либо символы будут введены, т.е. просто алфавит анализировать не вариант



0



EducatedFool

0 / 0 / 0

Регистрация: 28.09.2009

Сообщений: 88

22.05.2010, 02:11

2

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Private Declare Function GetKeyboardLayoutName _
                          Lib "user32" Alias "GetKeyboardLayoutNameA" _
                              (ByVal pwszKLID As String) As Long
 
Private Declare Function ActivateKeyboardLayout _
                          Lib "user32" (ByVal HKL As Long, _
                                        ByVal flags As Long) As Long
 
Sub ChangeKeyboardLayout()
    Dim KeybLayoutName As String, iState As Integer
 
    KeybLayoutName = String(9, 0)
    GetKeyboardLayoutName KeybLayoutName
    '409 - английская,
    '419 - русская
    'получение значения текущей раскладки
    iState = Val(CStr(CLng(Left$(KeybLayoutName, InStr(1, KeybLayoutName, Chr(0)) - 1))))
    Select Case iState
        Case 409
            MsgBox "Текущая раскладка Английская! Сменим на русскую!", 64, ""
        Case 419
            MsgBox "Текущая раскладка Русская! Сменим на английскую!", 64, ""
        Case Else
            MsgBox "Текущая раскладка какая-то другая! Менять не будем", 64, ""
    End Select
    'Переключение раскладки с русскую на английскую
    If iState = 419 Then
        ActivateKeyboardLayout 0, 0
    End If
    'Переключение раскладки с английской на русскую
    If iState = 409 Then
        ActivateKeyboardLayout 0, 0
    End If
End Sub

А вот пример в виде файла: http://excelvba.ru/XL_Files/Sa… -11-38.zip



0



20 / 6 / 1

Регистрация: 06.03.2010

Сообщений: 74

22.05.2010, 09:55

 [ТС]

3

Спасибо!Честно говоря, со всякими API и подобным с вызовом из библиотек не работал никогда.Круто!



0



Private Declare Function GetKeyboardLayoutName _
                          Lib "user32" Alias "GetKeyboardLayoutNameA" _
                              (ByVal pwszKLID As String) As Long
 
Private Declare Function ActivateKeyboardLayout _
                          Lib "user32" (ByVal HKL As Long, _
                                        ByVal flags As Long) As Long
 
Sub ChangeKeyboardLayout()
    Dim KeybLayoutName As String, iState As Integer
 
    KeybLayoutName = String(9, 0)
    GetKeyboardLayoutName KeybLayoutName
    '409 - английская,
    '419 - русская
    'получение значения текущей раскладки
    iState = Val(CStr(CLng(Left$(KeybLayoutName, InStr(1, KeybLayoutName, Chr(0)) - 1))))
    Select Case iState
        Case 409
            MsgBox "Текущая раскладка Английская! Сменим на русскую!", 64, ""
        Case 419
            MsgBox "Текущая раскладка Русская! Сменим на английскую!", 64, ""
        Case Else
            MsgBox "Текущая раскладка какая-то другая! Менять не будем", 64, ""
    End Select
    'Переключение раскладки с русскую на английскую
    If iState = 419 Then
        ActivateKeyboardLayout 0, 0
    End If
    'Переключение раскладки с английской на русскую
    If iState = 409 Then
        ActivateKeyboardLayout 0, 0
    End If
End Sub

Like this post? Please share to your friends:
  • Как в excel определить что находится в ячейке число или текст
  • Как в excel определить четное или нечетное число
  • Как в excel определить функцию графика
  • Как в excel определить формулу для подсчета
  • Как в excel определить среднее значение в столбце