![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Регистрация: 21.07.2016
Сообщений: 5
|
![]()
Доброго времени суток!
Я не спец, поэтому лепил макрос на глазок. Может ли кто-то из знатоков помочь понять, почему он не работает. Цель: поиск в выбранном куске текста (не во всем документе!) участков, набранных русской / украинской раскладкой, и их соответствующая транслитерация. Спасибо при любом результате! Sub Test() 'Identify Rus and Ukr and transliterate Dim sLatRu As Variant Dim sLatUa As Variant Dim sRus As String Dim sUkr As String Dim sOutRu As String Dim sOutUa As String Dim ochRu As Range, indexRu As Long Dim ochUa As Range, indexUa As Long sRus = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяА БВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" sLatRu = Array("a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "i", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "ch", "sh", "sch", "", "y", "", "e", "yu", "ya", "A", "B", "V", "G", "D", "E", "Yo", "Zh", "Z", "I", "I", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "Kh", "Ts", "Ch", "Sh", "Sch", "", "Y", "", "E", "Yu", "Ya") sUkr = "абвгдежзіїєийклмнопрстуфхцчшщьюяАБ ВГДЕЖЗІЇЄИЙКЛМНОПРСТУФХЦЧШЩЬЮЯ" sLatUa = Array("a", "b", "v", "g", "d", "e", "zh", "z", "i", "yi", "ye", "y", "i", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "ch", "sh", "sch", "", "yu", "ya", "A", "B", "V", "G", "D", "E", "Zh", "Z", "I", "Yi", "Ye", "Y", "I", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "Kh", "Ts", "Ch", "Sh", "Sch", "", "Yu", "Ya") If Selection.LanguageID = wdRussian Then For Each ochRu In Selection.Characters indexRu = InStr(1, sRus, ochRu.text, vbBinaryCompare) If indexRu <> 0 Then sOut = sOutRu & sLatRu(indexRu - 1) Else sOutRu = sOutRu & ochRu.text End If Next End If Selection.TypeText sOutRu If Selection.LanguageID = wdUkrainian Then For Each ochUa In Selection.Characters indexUa = InStr(1, sUkr, ochUa.text, vbBinaryCompare) If indexUa <> 0 Then sOutUa = sOutUa & sLatUa(indexUa - 1) Else sOutUa = sOutUa & ochUa.text End If Next End If Selection.TypeText sOutUa End Sub Последний раз редактировалось Ивка; 21.07.2016 в 21:20. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 29.09.2008
Сообщений: 378
|
![]()
1. Лишний пробел между А и Б:
Код:
Код:
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 21.07.2016
Сообщений: 5
|
![]()
Вождь, спасибо!
Сейчас исправлю и проверю. |
![]() |
![]() |
![]() |
#4 |
Регистрация: 21.07.2016
Сообщений: 5
|
![]()
К сожалению, не работает! Пробел между А и Б появляется при вставке в окно вопроса. В оригинале пробел отсутствует.
Вот исправленный код Sub Test() Identify Ru and Ukr and transliterate Dim sLatRu As Variant Dim sLatUkr As Variant Dim sRu As String Dim sUkr As String Dim sOutRu As String Dim sOutUkr As String Dim ochRu As Range, indexRu As Long Dim ochUkr As Range, indexUkr As Long sRu = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяА БВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" sLatRu = Array("a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "i", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "ch", "sh", "sch", "", "y", "", "e", "yu", "ya", "A", "B", "V", "G", "D", "E", "Yo", "Zh", "Z", "I", "I", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "Kh", "Ts", "Ch", "Sh", "Sch", "", "Y", "", "E", "Yu", "Ya") sUkr = "абвгдежзіїєийклмнопрстуфхцчшщьюяАБ ВГДЕЖЗІЇЄИЙКЛМНОПРСТУФХЦЧШЩЬЮЯ" sLatUkr = Array("a", "b", "v", "g", "d", "e", "zh", "z", "i", "yi", "ye", "y", "i", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "ch", "sh", "sch", "", "yu", "ya", "A", "B", "V", "G", "D", "E", "Zh", "Z", "I", "Yi", "Ye", "Y", "I", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "Kh", "Ts", "Ch", "Sh", "Sch", "", "Yu", "Ya") If Selection.LanguageID = wdRussian Then For Each ochRu In Selection.Characters indexRu = InStr(1, sRus, ochRu.text, vbBinaryCompare) If indexRu <> 0 Then sOutRu = sOutRu & sLatRu(indexRu - 1) Else sOutRu = sOutRu & ochRu.text End If Next End If Selection.TypeText sOutRu If Selection.LanguageID = wdUkrainian Then For Each ochUkr In Selection.Characters indexUkr = InStr(1, sUkr, ochUkr.text, vbBinaryCompare) If indexUkr <> 0 Then sOutUkr = sOutUkr & sLatUkr(indexUkr - 1) Else sOutUkr = sOutUkr & ochUkr.text End If Next End If Selection.TypeText sOutUkr End Sub |
![]() |
![]() |
![]() |
#5 |
Регистрация: 21.07.2016
Сообщений: 5
|
![]()
Не работает и базовый код (не работает, если выделенный тест вперемежку русско-украинский или выделение несплошное (островками)):
Sub Test() 'Identify Rus and transliterate Dim sLat As Variant Dim s As String Dim sOut As String Dim och As Range, index As Long s = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяА БВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" sLat = Array("a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "i", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "ch", "sh", "sch", "", "y", "", "e", "yu", "ya", "A", "B", "V", "G", "D", "E", "Yo", "Zh", "Z", "I", "I", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "Kh", "Ts", "Ch", "Sh", "Sch", "", "Y", "", "E", "Yu", "Ya") 'If Selection.LanguageID = wdRussian Then For Each och In Selection.Characters index = InStr(1, s, och.text, vbBinaryCompare) If Selection.LanguageID = wdRussian And index <> 0 Then sOut = sOut & sLat(index - 1) Else sOut = sOut & och.text End If Next 'End If Selection.TypeText sOut End Sub |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 29.09.2008
Сообщений: 378
|
![]()
Прям крик души
![]() Код:
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
|
![]() |
![]() |
![]() |
#7 |
Регистрация: 21.07.2016
Сообщений: 5
|
![]() ![]() Спасибо огроменное! PS.Просто творческое любопытство - как заставить код (и можно ли в принципе) работать на разбросанных по документу выделенных участках текста? Но это, конечно, уж мёд ложкой с моей стороны. Буду искать. Еще раз спасибо-спасибо! |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
транслитерация ISO/R | caute | Microsoft Office Word | 12 | 06.12.2011 12:29 |
Транслитерация | Rita666 | Помощь студентам | 1 | 03.12.2011 14:09 |
Транслитерация на С++ | 4ika | Общие вопросы C/C++ | 3 | 23.09.2010 22:14 |
ТРАНСЛИТЕРАЦИЯ НА ЯВЕ! | 4ika | Общие вопросы по Java, Java SE, Kotlin | 3 | 24.02.2010 19:23 |
Транслитерация | WIC | Microsoft Office Excel | 3 | 04.10.2007 20:18 |