Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Написать макрос Word, меняющий раскладку

AL_AXE Ученик (211), закрыт 2 недели назад
Нужно написать код VBA, который меняет раскладку выделенного текста с английской на русскую и наоборот. Например, "Ghbd? Икщю" меняет на "Прив, Bro."
Дополнен 2 недели назад
Punto switcher я в данном случае не рассматриваю. Гораздо проще нажать на значок макроса в панели быстрого доступа
Лучший ответ
Улик Додиков Оракул (92355) 2 недели назад
Держи. Работает вроде не совсем идеально по моим тестам, но твои потребности думаю с лихвой охватит.

 Sub ToggleKeyboardLayoutImproved() 
Dim engLayout As String, rusLayout As String
Dim specialEngChars As String, specialRusChars As String
Dim i As Long
Dim selectedText As String
Dim resultText As String
Dim isCharFound As Boolean

engLayout = "QWERTYUIOP[]ASDFGHJKL;'ZXCVBNM,./" & _
"qwertyuiop{}asdfghjkl:""zxcvbnm<>?/"
rusLayout = "ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ." & _
"йцукенгшщзхъфывапролджэячсмитьбю,"

specialEngChars = "[{]};:'"",<.>/?`~"
specialRusChars = "хХъЪжЖэЭбБюЮ.," & "ёЁ"

selectedText = Selection.Text
resultText = ""

For i = 1 To Len(selectedText)
Dim c As String
c = Mid(selectedText, i, 1)
Dim pos As Integer
isCharFound = False

pos = InStr(specialEngChars, c)
If pos > 0 Then
resultText = resultText & Mid(specialRusChars, pos, 1)
isCharFound = True
Else
pos = InStr(specialRusChars, c)
If pos > 0 Then
resultText = resultText & Mid(specialEngChars, pos, 1)
isCharFound = True
End If
End If

If Not isCharFound Then
pos = InStr(engLayout, c)
If pos > 0 Then
resultText = resultText & Mid(rusLayout, pos, 1)
isCharFound = True
End If
End If

If Not isCharFound Then
pos = InStr(rusLayout, c)
If pos > 0 Then
resultText = resultText & Mid(engLayout, pos, 1)
Else
resultText = resultText & c
End If
End If
Next i

Selection.Text = resultText
End Sub
AL_AXEУченик (211) 2 недели назад
Казалось бы, задачка простенькая, а кода, будто пентагон собрались взламывать. Спасибо!))
Улик Додиков Оракул (92355) AL_AXE, да не за шо ?
Остальные ответы
Jurii Высший разум (175937) 2 недели назад
Гораздо проще нажать на значок макроса в панели быстрого доступа
Да ну?
Нажать одну клавишу Pause/Break сильно труднее, чем найти макрос на панели, навести на него мышь, щёлкнуть ЛКМ…
Даже читать это долго, а не то что выполнить!
Поколение мышкоблудов.
AL_AXEУченик (211) 2 недели назад
У меня она заточена под вызов другой прогри. К сожалению, клавиш на ноуте может не хватать для всех нужных функций
AL_AXE Ученик (211) AL_AXE, проги*
Похожие вопросы