Консультация № 180469
27.10.2010, 17:59
50.88 руб.
0 21 1
Мне нужен Макрос для MS Word 2008. (не знаю в той ли теме пишу)

Итак вот что мне нужно.

Если я ввел в Word`е слово ublhj'ktrnhjcnfywbz то выделив и нажав (выполнить макрос) это слово должно превратиться в гидроэлектростанция и наоборот.
Т.е макрос должен заменят английские буквы на русские (в выделенном фрагменте) и наоборот.
Ну соответственно длинна выделенного фрагмента может быть любой(любое слово,фраза,предложение). И нужно чтобы пробелы,точки (и прочие символы) между словами сохранялись.

P.S. Макрос должен работать на [b]Windows 7[/b] в [b]MS Word 2008[/b]

Обсуждение

давно
Профессор
230118
3054
27.10.2010, 18:13
общий
это ответ
Здравствуйте, Иванов Евгений Витальевич!


Приложение:

Sub punto()
'
' punto Macro
'
'
Dim str As String
Dim str1 As String
str = Application.Selection.Text
Dim dlina As Integer
dlina = Len(str)
Dim rus As String
rus = "йцукенгшщзхъфывапролджэячсмитьбю"
Dim eng As String
eng = "qwertyuiop[]asdfghjkl;'zxcvbnm,."
Dim lang As Boolean 'true - russian, false - latin
If InStr(1, eng, Mid(str, 1, 1), VbCompareMethod.vbTextCompare) > 0 Then
lang = False 'english
Else
lang = True 'russian
End If

For i = 1 To dlina
lngPos = InStr(1, rus, Mid(str, i, 1), VbCompareMethod.vbTextCompare)
If lngPos > 0 Then 'russian letter
str1 = str1 + Mid(eng, lngPos, 1)
Else
lngPos = InStr(1, eng, Mid(str, i, 1), VbCompareMethod.vbTextCompare)
If lngPos > 0 Then ' english letter or ,.
If Mid(str, i, 1) = "." Then ' .
If lang = False And Mid(str, i + 1, 1) = " " And Mid(str, i + 2, 1) > "Z" Then 'единственное условие, при котором . преобразуется в ю
str1 = str1 + "ю"
Else
str1 = str1 + Mid(str, i, 1) 'Точка остается
End If
Else: str1 = str1 + Mid(rus, lngPos, 1)
End If
If Mid(str, i, 1) = "," Then
If lang = False And Mid(str, i + 1, 1) = " " And Mid(str, i + 2, 1) < "Z" Then 'единственное условие, при котором . преобразуется в ю
str1 = str1 + "б"
Else
str1 = str1 + Mid(str, i, 1)
End If
End If
Else
str1 = str1 + Mid(str, i, 1)
End If
End If
Next i
Application.Selection = str1
End Sub
Неизвестный
27.10.2010, 18:16
общий
Иванов Евгений Витальевич:
уточните версию Word - 2007 или 2010?
Неизвестный
27.10.2010, 18:21
общий
Я ошибся. Мне нужен Word - 2007.
Мне это для лабы в институте нужно.
Напишите пожалуйста как можно проще. И комментариев побольше.
давно
Академик
320937
2216
27.10.2010, 18:35
общий
Иванов Евгений Витальевич:
Добрый вечер! Нужно написать макрос (программу) на VBA?
Неизвестный
27.10.2010, 18:46
общий
Мне нужно
Используя встроенный редактор Visual Basic, создать в текстовом редакторе MS Word 2007 макрос, реализующий (то что я написал выше)

В общем на Visual Basic нужно. Просто я не совсем понимаю что значит буква А в VBA .
давно
Профессор
230118
3054
27.10.2010, 18:52
общий
Visual Basic for Applications
Неизвестный
27.10.2010, 18:55
общий
Цитата: Асмик Гаряка

Visual Basic for Applications

так то она так)

Цитата: lamed

Нужно написать макрос (программу) на VBA?

Одним словом.
Писать нужно на Visual Basic. (так чтобы работало в Word 2007)
давно
Академик
320937
2216
27.10.2010, 19:01
общий
Иванов Евгений Витальевич:
И нужно чтобы пробелы,точки (и прочие символы) между словами сохранялись.
Точка на английском регистре, насколько я понимаю, преобразуется в букву 'ю' на русском. Как, по-Вашему, должно быть "переведено" слово h.vrf ? Оно содержит точку. Слово ,h.rb ? Еще и запятая.
Неизвестный
27.10.2010, 19:23
общий
Цитата: lamed
Точка на английском регистре, насколько я понимаю, преобразуется в букву 'ю' на русском. Как, по-Вашему, должно быть "переведено" слово h.vrf ? Оно содержит точку. Слово ,h.rb ? Еще и запятая.


Давайте сделаем проще. Если после точки идет пробел то это точка.(запятая воскл. знак вопр. знак.) Во всех остальных случаях при переходе с английской раскладки на русскую точка это буква ю

Если переход с рус. раскладки на англ. то точка это всегда точка

Главное чтоб код был попроще и попонятней)) и с комментариями.
давно
Академик
320937
2216
27.10.2010, 19:33
общий
Иванов Евгений Витальевич:
Цитата: 308533
Если после точки идет пробел то это точка
Рассмотрим пример
Я_играю_на_гармошке_у_прохожих_на_виду
При переводе на английский получим, в частности
_buhf._
Знак подчеркивания использовал вместо пробела для наглядности.
При обратном переводе, согласно предложенному правилу, получим _игра._
Ведь теперь пробел идет после точки, не так ли?
Неизвестный
27.10.2010, 19:44
общий
Цитата: lamed
При переводе на английский получим, в частности
_buhf._
Знак подчеркивания использовал вместо пробела для наглядности.
При обратном переводе, согласно предложенному правилу, получим _игра._


Жесткач)
Нельзя ведь все слова заканчивающиеся на Ю и Б учесть. (я об этом не подумал)

давайте сделаем так. Если после точки идет пробел (а за пробелом заглавная буква) то это точка.

тогда _buhf._Ntvytkj_ переведется как _игра._Темнело_ а _Z_buhf._yf_ переведется как _Я_играю_на_
давно
Профессор
230118
3054
27.10.2010, 19:54
общий
Иванов Евгений Витальевич:
Предполагается, что весь выделенный фрагмент только на определенном языке?
Неизвестный
27.10.2010, 20:00
общий
Да конечно. Выделенный фрагмент содержит символы только одного языка. (одной раскладки)
Неизвестный
27.10.2010, 20:08
общий
Коммент для Ответ № 263690

Данный код меняет раскладку. Однако "съедает" пробелы.
давно
Профессор
230118
3054
27.10.2010, 20:10
общий
Иванов Евгений Витальевич:
Applications означает одно из приложений Word, Excel, Access и другие
Неизвестный
27.10.2010, 23:10
общий
на самом деле проблемы с точкой и запятой нет. как я понимаю - пользователь вводит русские слова и использует русскую раскладку для ввода точки и запятой. в английском языке им будут соответствовать символы / и ? соответственно. если же он набирает знаки препинания на кнопках б и ю, то проверку и преобразование нужно делать с конца текста - тогда если нашли заглавную букву и дальше пробел, то перед ними точно точка. но в этом случае получается, что пользователь использует две раскладки клавиатуры - русскую для ввода букв и английскую для знаков препинания, что должно противоречить условию задачи - набирать текст русскими буквами в английской раскладке.
еще в ответе Гаряка Асмик не учтены цифровые кнопки - что набираются с шифтом. типа № или $. их просто нужно добавить в массивы.
Неизвестный
27.10.2010, 23:34
общий
Пожалуйста переделайте. Чтобы пробелы не "съедались".
давно
Профессор
230118
3054
27.10.2010, 23:41
общий
Иванов Евгений Витальевич:
Готово
Неизвестный
27.10.2010, 23:54
общий
Все в"криказябрах" пожалуйста засуньте его в Word что ли. Русского текста просто нет(
давно
Профессор
230118
3054
01.11.2010, 18:59
общий
Иванов Евгений Витальевич:
Ответ исправлен. Проверьте. работает ли так, как надо.
Неизвестный
10.11.2010, 16:38
общий
Решил задать новый вопрос https://rfpro.ru/question/180670
Форма ответа