Translator – небольшая, но крайне полезная программа для переводчика, макрос встраиваемый в приложение MS Office Word, простой в освоении и бесплатный. Макрос может быть полезен переводчикам с/на английский язык.
Автор: englishelp.ru
Цена: Бесплатно (любые пожертвования принимаются на кошелек yandex-деньги 41001239288240)
Язык интерфейса: Английский
Размер: 290 кб
Ссылка: Скачать Translator_v1.6.5.1.zip
- Поиск в тексте всех дробных чисел разделенных запятой и замена запятых на точки для этих чисел (в формате английского языка)
- Поиск непереведенного текста, возможность поиска для русского или английского текста (с возможностью транслитерации).
- Подсчет статистики: подсчет для заданного текста количества содержащихся в нем так называемых «переводческих» страниц (из расчета общее количество символов с разделителями деленное на 1800). Есть возможность выполнить подсчет статистики для выделенного текста. Подсчет количества абзацев, табуляций, изображений, таблиц, сносок и много другого.
- Замена обычных пробелов между цифрой и единицей измерения на неразрывный пробел.
- Функция форматирования заголовков в стиле английского языка (первые буквы слов — заглавные).
- Вставка текста в MS Word с удалением форматирования (plain text).
- Поиск выделенного в документе word слова или словосочетания в Google.
Установка макроса Translator
Макрос распространяется в виде шаблона .dot (MS Office Word). Для автоматической установки макроса достаточно просто запустить приложенный к шаблону файл Setup.exe. После завершения установки в вашем приложении Office Word должна появиться дополнительная панель Translator. В случае неудачной установки следует обратиться к приложенному в архиве файлу «Как Установить Translator.html» для установки вручную.
Как установить макрос Translator вручную
Установка панели Translator в Word производится в том случае, если после установки макроса файлом Setup.exe панель Translator в Word не присутствует или Setup.exe не смог корректно завершить установку.
Первый вариант установки:
- Закройте Office Word!
- Скопируйте файл Translator.dot в папку c:Program FilesMicrosoft OfficeOFFICE10Startup
Указанный путь может отличаться в зависимости от пути куда был установлен Office Word и от его версии. - Запустите Word.
На основной панели Word должна появиться дополнительная панель Translator.
Второй вариант установки:
- Запустите Word.
- Войдите в меню Сервис(Tools) – Шаблоны и надстройки(Templates and Add-ins).
- Нажмите кнопку Добавить(Add…) и выберите файл Translator.dot.
- Перезапустите Word!
На основной панели Word должна появиться дополнительная панель Translator.
Если ни один из перечисленных способов не помог установить программу Translator, напишите письмо разработчику программы.
Скриншоты макроса Translator с описаниями
Функция Замена запятых в числах на точки в формате английского языка (вид панели Translator встраиваемой в MS Word). Так число в формате 4,5 будет заменено на число 4.5 в формате английского языка.
Функция Поиск непереведенного текста (вид панели Translator встраиваемой в MS Word).
Диалог поиска непереведенных фрагментов текста (поиск непереведенного английского и русского текста с возможностью транслитерации для русского текста)
Функция Замены обычных пробелов между значением и единицей измерения на неразрывные пробелы (панель Translator в MS Word)
Функция Обработка заголовков – все заголовки в тексте на английском языке приводятся к «правильному виду» (первые буквы слов переводятся в верхний регистр). Таким образом, после применения данной функции макроса к выделенному тексту заголовок, к примеру, вида «This is just a title» будет преобразован в «This Is Just a Title». Для начала обработки заголовков нажмите соответствующую кнопку на панели или сочетание горячих клавиш Alt+Ctrl+T
Функция Поиск термина в Google. Выделите слово или словосочетание в документе Word и нажмите эту кнопку или сочетание клавиш Alt+Ctrl+G
Функция Вставка текста без форматирования – plain text (панель Translator в MS Word). Для вставки текста из буфера обмена нажмите эту кнопку или сочетание клавиш Shift+Ins
Функция Извлечение текста из текстовых блоков Word (Shapes, Text boxes). Откройте документ Word, содержащий текстовые блоки, нажмите кнопку Extract Text from Shapes на панели Translator. После этого будет создан еще один файл Word, содержащий весь текст, извлеченный из текстовых блоков.
Функция подсчет статистики (панель Translator в MS Word)
Диалог подсчета статистики
Ссылка на скачивание: Скачать Translator_v1.6.5.1.zip
Теги: translator | макрос для переводчика | подсчет статистики | программа для переводчика
0 / 0 / 0 Регистрация: 06.11.2015 Сообщений: 7 |
|
1 |
|
Word 14.01.2020, 08:56. Показов 2587. Ответов 12
Здравствуйте! Подскажите, как решить следующую задачу: Появилась необходимость перевода данных отчетов на английский язык. Сделать это сразу в программе не представляется возможным. Как я вижу решение поставленной задачи — сформировать excel таблицу, где в одном столбце вписаны известные слова, предложения и обозначения на русском языке, а во втором столбце соответствующие им переводы на английском. Таблицу можно пополнять. Далее, должен быть какой-то макрос в word в виде надстройки. Каждый, кому это будет необходимо сможет себе эту надстройку установить и пользоваться. Макрос по команде пользователя (нажатие пиктограммы в надстройке) будет осуществлять поиск в отчете слова, предложения и обозначения, сравнивать их с таблицей excel (которая размещена в известном месте, например Мои документы), и осуществлять замену. Прошу помочь в решении этой задачи.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
14.01.2020, 08:56 |
Ответы с готовыми решениями: Перевод Eng to Rus через Regex string Ru… Язык Eng/Rus RUS или ENG Пропал значок RUSENG в языковой панели 12 |
Aleksan7 109 / 60 / 27 Регистрация: 22.02.2018 Сообщений: 189 |
||||
14.01.2020, 09:30 |
2 |
|||
составляете словарь, как вы написали, в два столбца. и далее циклом проходите по всем строкам словаря, и функцией
«переводите»
1 |
0 / 0 / 0 Регистрация: 06.11.2015 Сообщений: 7 |
|
14.01.2020, 10:07 [ТС] |
3 |
Aleksan7, спасибо вам. Уверен, что код, написанный вами понятен профессионалам, но я таковым, к сожалению, не являюсь. Максимум, что я могу сделать, это прочесть чужой код, попробовать его понять, и местами подкорректировать, или адаптировать, под свои нужны. С вашим же кодом, я чувствую, нужно делать и начало, и завершение кода. Если вас не затруднит, распишите подробнее.
0 |
109 / 60 / 27 Регистрация: 22.02.2018 Сообщений: 189 |
|
14.01.2020, 10:22 |
4 |
jonny0, на теоретический вопрос — теоретический ответ
0 |
Модератор 11342 / 4661 / 748 Регистрация: 07.08.2010 Сообщений: 13,505 Записей в блоге: 4 |
|
14.01.2020, 13:06 |
5 |
решить следующую задачу: есть отчет в word, который формирует программа любой отчет — это сочетание постоянной и переменной информации — постоянная — это название отчета,его логотип, шапки таблиц, подписи, примечания но в любом случае прежде чем что-то проектировать, надо увидеть примеры того и другого перевод слов(словосочетаний) — это одно
0 |
0 / 0 / 0 Регистрация: 06.11.2015 Сообщений: 7 |
|
14.01.2020, 15:51 [ТС] |
6 |
Дайте мне немного времени, я все подготовлю
0 |
0 / 0 / 0 Регистрация: 06.11.2015 Сообщений: 7 |
|
17.01.2020, 16:45 [ТС] |
7 |
Готово! посмотрите, пожалуйста.
0 |
Aleksan7 109 / 60 / 27 Регистрация: 22.02.2018 Сообщений: 189 |
||||||
20.01.2020, 15:25 |
8 |
|||||
jonny0, попробуйте работает долго, так как это простой перебор файлы с которыми будет работать макрос должны быть закрыты вот код или файл во вложении
Вложения
1 |
0 / 0 / 0 Регистрация: 06.11.2015 Сообщений: 7 |
|
21.01.2020, 09:47 [ТС] |
9 |
Aleksan7, спасибо вам большое! Все работает. Есть некоторые косяки с переводом, но это поправимо, думаю. Есть вопрос, в развитии решения: 1. можно ли в вашем excel файле сделать список файлов, требующих перевода? Т.е. макрос будет поочередно переводить все файлы по списку. 2. можно ли задавать диапазон листов для перевода? Например из 6-ти листов перевод требуют только 1-й и 3-й, или с 3-го по 6-й?
0 |
109 / 60 / 27 Регистрация: 22.02.2018 Сообщений: 189 |
|
21.01.2020, 10:54 |
10 |
jonny0, если никто не сделает, то попозже допишу.
0 |
0 / 0 / 0 Регистрация: 06.11.2015 Сообщений: 7 |
|
21.01.2020, 10:56 [ТС] |
11 |
Aleksan7, список файлов в виде полных путей к ним.
0 |
Aleksan7 109 / 60 / 27 Регистрация: 22.02.2018 Сообщений: 189 |
||||
21.01.2020, 17:09 |
12 |
|||
Сообщение было отмечено jonny0 как решение Решениеjonny0, список файлов в столбце В,
1 |
0 / 0 / 0 Регистрация: 06.11.2015 Сообщений: 7 |
|
23.01.2020, 11:58 [ТС] |
13 |
Aleksan7, спасибо огромное! Очень выручили.
0 |
Возможно, у вас есть ощущение, что тема макросов в Ворде достаточно маргинальная. Кто ими может пользоваться-то вообще? Ну, малварь делают иногда… Да и пишутся они на давно забытом VBA (Visual Basic for Applications, он же несколько урезанный Visual Basic 6 в интерпретируемом виде), фу!
Но на самом деле у многих ведь возникает потребность то какой-нибудь отчётик в ворде написать, то курсовую оформить, то резюме перед отправкой в компанию вашей мечты подправить… А у некоторых работа напрямую связана с Word. Часто различные системы документации предлагают экспорт в форматы doc или docx, которые нужны вашим заказчикам. И бывает, что документы после экспорта выглядят фигово, приходится их исправлять.
Работа в ворде нередко подразумевает выполнение каких-то однообразных повторяющихся действий, которые иногда (но далеко не всегда!) решаются грамотной настройкой стилей и их применением, а также использованием шаблонов. Как же автоматизировать всё остальное? Тут-то нам на помощь приходят те самые макросы.
Что же в них такого хорошего? Ну, например, они автоматически и достаточно быстро выполняют за вас однообразные действия. Могут что-то подсчитать, переформатировать документ, пометить аннотациями подозрительные места, — словом, всё, что запрограммируете. Могут даже в режиме реального времени что-то исправлять и о чем-то предупреждать, пока вы пишете документ. VBA в Word позволяет автоматизировать практически все действия, которые вы можете выполнить с документом вручную.
Макросы можно прикрепить как к конкретному документу (в чём для нас мало пользы, а для писателей троянов это единственная опция), так и к самому ворду, что позволяет применять макросы к любому документу, с которым вы работаете.
Макросы работают в любой версии Word и требуют минимум правок при переносе с одной версии на другую (а чаще всего вообще не требуют). На макросах можно даже реализовать полноценный пользовательский интерфейс с формами!
Давайте же занырнём в Visual Basic и напишем что-нибудь полезное! В качестве первого примера я покажу, как сделать макрос, который заменит два и более последовательных перевода строки на единственный. Это часто требуется при исправлении документов после экспорта из систем документации, или если вы хотите удалить случайно проставленные лишние переводы строк в собственноручно написанном документе. Макрос сделаем добротный, с пользовательским интерфейсом и прогрессом выполнения операции.
Чтобы начать писать или использовать макросы, сначала требуется убедиться, что в Word’е отображается панель «Разработчик» («Developer»). Если она у вас не отображается, следует зайти после создания нового документа в меню «Файл» («File») -> «Параметры» («Options») -> «Настроить ленту» («Customize Ribbon»), после чего найти там и установить флажок «Разработчик» («Developer»).
После этого нужно зайти на вкладку «Разработчик» и выбрать меню «Visual Basic».
В открывшемся окне слева вы увидите два проекта: «Normal» и проект, относящийся к текущему открытому документу. Возможно, в проекте «Normal» у вас уже будет какой-то файл в каталоге «Modules». В любом случае, создайте новый модуль, кликнув правой кнопкой по проекту «Normal» и выбрав «Insert» -> «Module».
Созданный модуль представляет из себя файл, куда мы и будем писать код макросов. Можно переименовать модуль (по умолчанию его имя будет «Module1») в окне «Properties» -> «Name». Я назову свой модуль «AllMacros». Теперь откроем код модуля, дважды кликнув по его имени, и приступим к созданию макроса. Напомню, что наша цель — заменить два и более последовательных перевода строки на единственный, произведя замены по всему документу. Очевидно, нам потребуется функция, которая осуществляет поиск по тексту, ведь мы хотим найти несколько последовательных переводов строки. В Word это эквивалентно началу нового параграфа. Вы могли бы осуществить поиск начала нового параграфа через обычное окно поиска, введя в поле поиска ^p
, ^13
или ^013
(что соответствует ASCII-коду перевода строки). Функция поиска будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Private Function FindNextText(text As String, useWildcards As Boolean) Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = text .Forward = True .Format = False .MatchCase = False .MatchWholeWord = False .MatchKashida = False .MatchDiacritics = False .MatchAlefHamza = False .MatchControl = False .MatchWildcards = useWildcards .MatchSoundsLike = False .MatchAllWordForms = False .Wrap = wdFindStop End With Selection.Find.Execute FindNextText = Selection.Find.Found End Function |
Давайте разберём, что тут происходит. Мы объявляем функцию с двумя параметрами. Первый имеет тип String
— это текст для поиска, а второй Boolean
говорит о том, нужно ли использовать символы подстановки (wildcards). Про них я поговорю позже. В следующих двух строках 2 и 3 мы очищаем форматирование для строки поиска и строки замены, если оно было задано пользователем. Word позволяет задать форматирование строки поиска/замены, а для нашей задачи это не требуется. Далее мы задаём набор параметров для объекта Selection.Find
: выставляем неинтересные нам параметры в False
, параметр Text
— это текст, который мы хотим найти, а параметр MatchWildcards
указывает на использование символов подстановки. Параметр Wrap
говорит о том, следует ли продолжать поиск, когда мы дошли до той точки, с которой поиск начали, и у нас его значение установлено в wdFindStop
, так как мы хотим остановиться, когда дойдём до конца документа, и не зацикливать поиск.
Вообще, всё это обилие свойств и объектов из объектной модели Word, Excel и PowerPoint (да, там тоже есть макросы) хорошо описано в MSDN. Например, вот тут перечислены свойства и методы объекта Find. Есть русская документация (скажем, эта страница), но она выполнена совершенно кринжовым машинным переводом, невозможно читать:
Есть совершенно смехотворные страницы:
В общем, лучше читайте на английском.
Кроме того, все доступные объекты, их свойства и методы можно посмотреть прямо в редакторе VBA в самом Word’е. Для этого нужно нажать F2
или выбрать меню «View» -> «Object browser», что приведет к открытию браузера объектов (Object browser), в котором можно пролистать или поискать то, что вам доступно.
Но вернёмся к нашей функции. На строке 19 мы непосредственно выполняем поиск заданного текста с указанными параметрами. Строка 20 — эта конструкция, аналогичная return
в си-подобных языках, указывает возвращаемое значение функции. Мы возвращаем булевое значение Selection.Find.Found
, которое говорит о том, было ли что-то найдено.
Хочу заметить, что использование объекта Selection.Find
и изменение его свойств заменит их значения и для пользователя. Например, если вы в Word искали что-то хитроумное с конкретно заданными параметрами, то выполнение макроса заменит ваши параметры поиска на те, которые мы задали в макросе. В идеале, их можно запомнить, а потом вернуть, но мы не будем так сильно заморачиваться, а просто всё за собой подчистим. Сделаем функцию, которая сбрасывает параметры в значения по умолчанию:
Private Sub ClearFindAndReplaceParameters() With Selection.Find .ClearFormatting .Replacement.ClearFormatting .Text = «» .Replacement.Text = «» .Forward = True .Wrap = wdFindStop .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With End Sub |
Обратите внимание, что это уже Sub
, а не Function
, потому что мы не хотим из этой процедуры возвращать никакое значение. Это аналог функции void
в си-подобных языках.
Теперь нужно определить, как нам найти два или более последовательных перевода строки. Для этого нам и потребуются упомянутые ранее wildcards. Word поддерживает символы подстановки при поиске, и по своей функциональности они напоминают регулярные выражения. Кстати, вы можете ими пользоваться и без макросов из окна расширенного поиска:
Хорошее описание символов подстановки я нашел здесь, правда, на английском языке. Составим регулярное выражение для поиска двух и более последовательных переводов строки: [^013]{2,}
. Это очень похоже на классическое регулярное выражение Perl или PCRE, но в квадратных скобках в уникальном стиле Word мы задаем символ перевода строки. Фигурные скобки указывают, что символов перевода подряд должно быть два или более. Тут, кстати, есть нюанс: не во всех версиях/локализациях Word такая регулярка заработает. В некоторых случаях вместо запятой потребуется указать точку с запятой (да, в Microsoft иногда делают крайне странные вещи). Чтобы сделать наш макрос более универсальным, напишем функцию, которая вернёт регулярное выражение, пригодное для поиска в той версии Word, в которой эту функцию запустили:
Private Function GetLineBreakSearchRegExp() On Error GoTo Err FindNextText «[^013]{2,}», True GetLineBreakSearchRegExp = «[^013]{2,}» Exit Function Err: GetLineBreakSearchRegExp = «[^013]{2;}» End Function |
Здесь мы сначала пытаемся осуществить поиск с помощью wildcard’а [^013]{2,}
. Если всё окей, то вернём из функции этот самый wildcard как рабочий (строка 4). В противном случае произойдёт ошибка, но мы готовы её обработать: мы установили обработчик всех ошибок в строке 2. Нас перекинет на метку Err
, и тут мы вернём wildcard, который пригоден для других ревизий Word (в котором запятая внутри фигурных скобок заменена на точку с запятой).
Далее напишем функцию, которая будет заменять несколько последовательных переводов строки на единственный:
Private Sub RemoveNextEnters() Selection.MoveStart wdWord, 1 If Selection.Range.Start <> Selection.Range.End Then Selection.Delete End Sub |
Эта функция подразумевает, что вызывать её будут тогда, когда объект Selection
указывает на найденные несколько переводов строки. В строке 2 перемещаем начало выделения (а в выделены у нас будут все найденные последовательные переводы строки) на один символ вперед, а затем в строке 3, если начало выделения не совпадает с его концом, удаляем его содержимое. Таким образом, если было выделено три перевода строки, мы отступаем вперед на 1 символ (оставляя один перевод строки нетронутым), а затем удаляем оставшиеся два.
Осталось написать последнюю функцию, которая будет всем управлять.
Sub RemoveExcessiveEnters() Dim lineBreakSearchRegExp As String lineBreakSearchRegExp = GetLineBreakSearchRegExp() Selection.HomeKey Unit:=wdStory While FindNextText(lineBreakSearchRegExp, True) = True RemoveNextEnters Wend ClearFindAndReplaceParameters End Sub |
Здесь мы оперируем ранее написанными функциями. Сначала получаем текст регулярного выражения (wildcard’а) для поиска нескольких переводов строки подряд, затем вызовом HomeKey
в строке 5 переходим в самое начало документа (перемещаем туда курсор), а затем в цикле ищем все интересующие нас места и удаляем излишние переводы строки. В конце сбрасываем параметры поиска на значения по умолчанию.
Вот и всё, макрос можно запускать! Обратите внимание, что все функции, кроме последней, мы пометили Private
. Мы не хотим, чтобы их вызывали напрямую. Доступной для вызова снаружи будет только функция RemoveExcessiveEnters
. Перед запуском макроса стоит убедиться, что макросы включены. Если вылазит такая панель, то нужно нажать «Включить содержимое» («Enable content»):
Если такой панели нет, то можно зайти в меню «Файл» («File») -> «Сведения» («Info») и включить макросы уже оттуда:
Вы можете включить макросы на время одного сеанса Word (это по умолчанию и происходит, если нажимаете «Включить содержимое»), так что после перезапуска Word макросы снова будут отключены. Для запуска макроса возвращаемся в Word на панель «Разработчик» и нажимаем кнопку «Макросы» («Macros»), выбираем наш макрос RemoveExcessiveEnters
и нажимаем «Выполнить» («Run»). Разумеется, у вас должен быть открыт какой-нибудь подопытный документ, где имеются лишние переводы строк. В качестве бонуса наш макрос ещё и удалит пустые элементы списков, потому что они представляют из себя точно такие же несколько переводов строки подряд.
Макрос выполняется достаточно быстро. Его действие можно отменить (каждый шаг независимо), открыв меню выполненных действий:
Макросы можно отлаживать через окно VBA, в котором мы писали макрос. Кликнув слева от строки кода, можно, как и в других средах разработки, поставить точку останова, а потом запустить макрос кнопкой «Run». Запустится та функция, на которой у вас находится курсор. Если вы поставите курсор на функцию с параметрами, то появится обычный запрос на выбор макроса для запуска, как при нажатии на кнопку «Макросы» в Word.
Думаю, что материала для одной статьи уже вполне достаточно. Я, конечно, пообещал горы функционала в виде интерфейса пользователя, отслеживания прогресса выполнения, и всё это обязательно будет, но в следующей публикации.
Код макроса можно скачать тут. Вы сможете его импортировать к себе в Word, кликнув правой кнопкой на «Normal» -> «Import file…» и выбрав загруженный файл.
P.S. Кстати, рекомендую создавать бэкапы своих макросов, экспортируя их куда-нибудь на диск. Даже лицензионный Word имеет свойство их иногда по какой-то причине удалять из шаблона Normal, в котором мы их создавали.
Function Translit(ByVal txt As String) As String iRussian$ = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя" iTranslit = Array("", "a", "b", "v", "g", "d", "e", "jo", "zh", "z", "i", "jj", "k", _ "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", _ "sh", "zch", "''", "'y", "'", "eh", "ju", "ja") For iCount% = 1 To 33 txt = Replace(txt, Mid(iRussian$, iCount%, 1), iTranslit(iCount%), , , vbTextCompare) Next Translit$ = txt End Function
Sub ПримерИспользованияФункцииTranslit() txt = "проверка работы транслита" newtxt = Translit(txt) ' результат = строка "proverka rabot'y translita" MsgBox "Строка """ & txt & """" & vbNewLine & "преобразована в строку """ _ & newtxt & """", vbInformation, "Результат обработки" End Sub
Надстройку для транслитерации выделенного диапазона ячеек,
а также расширенную версию функции транслитерации, можно скачать в этой статье
(добавлено в связи с просьбой выполнить обратную транслитерацию)
К сожалению, процесс обратной транслитерации весьма затруднён (я бы даже сказал, что в общем случае невозможно сделать такую функцию, которая преобразовывала бы строку после транслитерации к исходному виду).
Попытаюсь объяснить, почему так происходит:
Допустим, в качестве исходной строки у нас будет текст «щзч схш жзх»
Sub ПримерИспользованияФункцииTranslit() txt = "щзч схш жзх" newtxt = Translit(txt) Debug.Print newtxt ' результат = строка "zchzch shsh zhzh" MsgBox "Строка """ & txt & """" & vbNewLine & "преобразована в строку """ _ & newtxt & """", vbInformation, "Результат обработки" End Sub
И что же мы видим на выходе?
А вот что: «zchzch shsh zhzh»
Достаточно похожие сочетания букв, не правда ли?
И как теперь макросу определить, что означает сочетание «zch sh zh» — «щ сх ж» или «зч ш ж»?
Или, может, «зч сх зх»? Все варианты для макроса ведь равнозначны…
А сочетание «zhzh» следует перевести как «зхзх» или как «жж»?
То же самое касается некоторых других буквосочетаний.
Специально проверил транслитерацию подобных сочетаний на популярном сервисе http://www.translit.ru/
Результат — при обратном переводе на русский исходная строка изменилась: схш жзх —> shsh zhzh —> шш жж
Вывод: учитывая возможное количество неопределённостей, проще обратную транслитерацию выполнять вручную.
Другой вариант функции:
Function Translit(ByVal txt As String) As String ' с учётом регистра символов txtRussian$ = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя" arrTranslit = Array("", "a", "b", "v", "g", "d", "e", "e", "zh", "z", "i", "y", "k", _ "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts", "tch", _ "sh", "sch", "", "y", "", "e", "yu", "ya") For iCount% = 1 To 33 txt$ = Replace(txt$, Mid(txtRussian$, iCount%, 1), arrTranslit(iCount%), , , vbBinaryCompare) ' строчные txt$ = Replace(txt$, UCase(Mid(txtRussian$, iCount%, 1)), UCase(arrTranslit(iCount%)), , , vbBinaryCompare) ' прописные Next Translit$ = txt$ End Function
Результат работы (другой набор символов для замены, учитывается регистр)
Исходная строка: «А-Б-В-Г-Д-Е-Ё-Ж-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Ч-Ш-Щ-Ъ-Ы-Ь-Э-Ю-Я»
Итоговая строка: «A-B-V-G-D-E-E-ZH-Z-I-Y-K-L-M-N-O-P-R-S-T-U-F-KH-TS-TCH-SH-SCH—Y—E-YU-YA»
- 53494 просмотра
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
Translator — макрос для переводчика
Translator — макрос для переводчика
Коллеги, здравствуйте.
Хотелось поделиться с вами еще одним небольшим, но весьма полезным инструментом, который может немного облегчить наш с вами труд.
Макрос, который я предлагаю вашему вниманию, встраивается в виде дополнительной панели в MS Word.
Translator умеет:
1. Собирать статистику для текущего документа Word из расчета 1800 знаков = 1 переводческая страница (в том числе подсчет статистики для «разбитых» фрагментов текста, т.е. фрагментов выделенных с зажатой клавишей Ctrl).
2. Осуществлять поиск оставшихся непереведенными фрагментов текста (поиск для текстов на русском и английском, транслитерация).
3. Замена запятых в числах на точки в формате английского языка (5,5 будет заменено на 5.5).
Но самое главное, т.к. я имею выход на разработчика макроса, важно ваше мнение по поводу возможных улучшений и доработки программы.
Скачать макрос Translator можно по этой ссылке
http://www.englishelp.ru/archives/soft/ … slator.zip
Получить более подробное описание со скриншотами можно здесь http://www.englishelp.ru/soft/soft-for-translator/92-translator-macro.html
- LyuFi
- Сообщения: 18
- Зарегистрирован: Вт авг 26, 2008 16:16
-
- Сайт
Re: Translator — макрос для переводчика
Cowboy » Пн мар 23, 2009 13:39
А как заменить Points на Commas? То есть с английского на русский.
Или цифру без первого нолика: .123 на 0,123 ?
С печатью интеллекта под глазами… (R) Ольга Арефьева
-
Cowboy - Сообщения: 1430
- Зарегистрирован: Чт сен 08, 2005 10:40
- Откуда: Казахстан, пос. Иргиз
- Язык(-и): английский <> русский
-
- Сайт
- ICQ
Re: Translator — макрос для переводчика
LyuFi » Пн мар 23, 2009 15:32
Cowboy писал(а):А как заменить Points на Commas? То есть с английского на русский.
Или цифру без первого нолика: .123 на 0,123 ?
Наличие данной функциональности обсуждалось некоторое время, но потом было решено не включать ее в макрос.
Причина в том, что часто для нумерации разделов люди не используют функцию автоматической нумерации Word, а попросту пишут «3.1 Глава о чем-то». В таком случае будет больше проблем, чем пользы от макроса, который глобально заменит «3.1 Глава о чем-то» на «3,1 Глава о чем-то».
В обозримом будущем планируется добавить функцию глобальной замены кавычек в формате «текст» на «текст» (для русско-английских переводов) и наборот (для англо-русских).
- LyuFi
- Сообщения: 18
- Зарегистрирован: Вт авг 26, 2008 16:16
-
- Сайт
Re: Translator — макрос для переводчика
LyuFi » Вт май 26, 2009 22:13
В макрос Translator http://www.englishelp.ru/soft/soft-for-translator/92-translator-macro.html была добавлена небольшая, но полезная функциональность — Замена обычных пробелов между значением и единицей измерения на неразрывный пробел (пожелание многих заказчиков).
Поддерживается ~351 названий единиц измерения на английском языке и 205 названий единиц измерения на русском языке. Единицы измерения системы СИ. Если вы захотите использовать функциональность и в процессе работы обнаружите какие-либо единицы, для которых замена не была выполнена, то можете писать прямо сюда или на адрес adminСОБАЧКАenglishelp.ru, всё обязательно исправят.
Также были исправлены незначительные ошибки и несколько оптимизирована скорость работы макроса.
Скачать макрос Translator v1.1 http://www.englishelp.ru/archives/soft/translator/Translator.zip
- LyuFi
- Сообщения: 18
- Зарегистрирован: Вт авг 26, 2008 16:16
-
- Сайт
Re: Translator — макрос для переводчика
Ronny » Вс июл 05, 2009 10:24
Скажите, а планируется дальнейшее развитие этого набора макросов? У меня, например, есть много часто повторяющихся действий над текстом, но которые не автоматизировать простой записью (record) макроса в Word, нужно минимально знать Visual Basic. Можно ли, скажем, сделать заказную версию вашего макроса (с разумной оплатой, конечно )?
-
Ronny - Сообщения: 123
- Зарегистрирован: Пт сен 21, 2007 14:11
- Язык(-и): eng-rus
-
- Сайт
- ICQ
Re: Translator — макрос для переводчика
LyuFi » Вс июл 05, 2009 15:34
Ronny писал(а):Скажите, а планируется дальнейшее развитие этого набора макросов? У меня, например, есть много часто повторяющихся действий над текстом, но которые не автоматизировать простой записью (record) макроса в Word, нужно минимально знать Visual Basic. Можно ли, скажем, сделать заказную версию вашего макроса (с разумной оплатой, конечно )?
Большое спасибо за положительный отзыв и внимание к программе! Любые ваши предложения только приветствуются. Пишите ваши идеи здесь или письмом на adminСОБАЧКАenglishelp.ru.
Если есть желание, то с радостью примем любые пожертвования на кошелек yandex-деньги 41001239288240. Все средства пойдут на оплату хостинга сайта http://www.englishelp.ru. Заранее спасибо
- LyuFi
- Сообщения: 18
- Зарегистрирован: Вт авг 26, 2008 16:16
-
- Сайт
Re: Translator — макрос для переводчика
Ronny » Ср июл 08, 2009 17:20
О нужных мне макросах отписал в ПМ.
-
Ronny - Сообщения: 123
- Зарегистрирован: Пт сен 21, 2007 14:11
- Язык(-и): eng-rus
-
- Сайт
- ICQ
Re: Translator — макрос для переводчика
LyuFi » Пт сен 11, 2009 00:25
Добавлены некоторые улучшения в версии макроса Translator 1.5.
1. Изменен подсчет статистики, теперь, кроме переводческих страниц, посчитать можно следующее:
2. Добавлена небольшая функция — «Вставить текст без форматирования». По нажатии кнопки на панели макроса или сочетания клавиш Shift+Ins текст из буфера обмена вставляется как plain text:
3. Добавлена небольшая функция — «Поиск термина в Google». Выделенное слово или словосочетание в документе Word, при нажатии соответствующей кнопки на панели макроса или сочетания клавиш Alt+Ctrl+G, отправляется в виде поискового запроса в Google:
Скачать обновленную версию макроса Translator 1.5 вы сможете по ссылке: http://www.englishelp.ru/soft/soft-for-translator/92-translator-macro.html
- LyuFi
- Сообщения: 18
- Зарегистрирован: Вт авг 26, 2008 16:16
-
- Сайт
Re: Translator — макрос для переводчика
LyuFi » Пн окт 05, 2009 16:48
Добавлена новая функциональность в макрос Translator — Форматирование английских заголовков (применение заглавных букв в заголовках).
Все заголовки в тексте на английском языке приводятся к «правильному виду» (первые буквы слов переводятся в верхний регистр, правила, по которым работает данная функциональность макроса, приведены по следующей ссылке http://www.englishelp.ru/learn-english/articles-for-learners/238-title-capitalization.html — Английские заголовки. Заглавные буквы). Таким образом, после применения данной функции макроса к выделенному тексту заголовок, к примеру, вида «This is just a title» будет преобразован в «This Is Just a Title». Для начала обработки заголовков нажмите соответствующую кнопку на панели или сочетание горячих клавиш Alt+Ctrl+T.
Скачать обновленную версию макроса Translator 1.5.1 вы сможете по ссылке: http://www.englishelp.ru/soft/soft-for-translator/92-translator-macro.html
- LyuFi
- Сообщения: 18
- Зарегистрирован: Вт авг 26, 2008 16:16
-
- Сайт
Re: Translator — макрос для переводчика
Руст » Чт окт 08, 2009 12:32
Спасибо за ваш труд, макросом частенько пользуюсь.
Переводчиком нужно или быть или не быть вообще! ©
-
Руст - Сообщения: 722
- Зарегистрирован: Вт авг 30, 2005 10:54
- Язык(-и): Английский — русский
-
- Сайт
Re: Translator — макрос для переводчика
medvedeff » Чт окт 08, 2009 13:37
Было бы здорово, если бы при сборе статистики макрос исправлял недостатки Word , т.е. считал бы текст в текстовых врезках (text box), колонтитулах и т.п., а также учитывал знаки переноса строки. Отдельные примеры кода для этого есть и на этом форуме, например, здесь:
viewtopic.php?f=11&t=10539&start=0
-
medvedeff - Сообщения: 7
- Зарегистрирован: Пн окт 05, 2009 08:47
- Откуда: Европа
- Блог: Просмотр блога (2)
Re: Translator — макрос для переводчика
LyuFi » Пн окт 12, 2009 23:08
Руст писал(а):Спасибо за ваш труд, макросом частенько пользуюсь.
Руст, спасибо вам за положительный отзыв! Приятно осознавать, что результат затраченных усилий востребован.
medvedeff писал(а):Было бы здорово, если бы при сборе статистики макрос исправлял недостатки Word , т.е. считал бы текст в текстовых врезках (text box), колонтитулах и т.п., а также учитывал знаки переноса строки. Отдельные примеры кода для этого есть и на этом форуме, например, здесь:
http://trworkshop.net/forum/viewtopic.p … 39&start=0
Функция подсчета статистики была переработана, результатом стало следующее:
Скачать обновленную версию макроса Translator 1.6.0 по-прежнему можно по ссылке: http://www.englishelp.ru/soft/soft-for-translator/92-translator-macro.html
Макрос пока не считает статистику для текста, помещенного в text boxes, которые, в свою очередь, помещены в колонтитулы.
- LyuFi
- Сообщения: 18
- Зарегистрирован: Вт авг 26, 2008 16:16
-
- Сайт
Re: Translator — макрос для переводчика
LyuFi » Вс ноя 29, 2009 15:59
Доброго здравия, коллеги!
Очередное обновление макроса Translator.
Во-первых, было много исправлений в макросах Подсчет статистики и Форматирование английских заголовков, если вы пользуетесь этими макросами, то желательно обновиться.
Также добавлена новая функция извлечения текста из текстовых блоков Word (Shapes, TextBoxes и т.п.)
Функция Извлечение текста из текстовых блоков Word. Откройте документ Word, содержащий текстовые блоки, нажмите кнопку Extract Text from Shapes на панели Translator. После этого будет создан еще один файл Word, содержащий весь текст, извлеченный из текстовых блоков.
Когда это м.б. полезно? На практике случается переводить файлы, содержащие большое количество изображений с текстом внутри, переводить их с помощью системы CAT становится трудоемкой работой. После извлечения всего текста из текстовых блоков в отдельный файл, переводить становится гораздо проще. После завершения перевода, претранслируем исходный файл, содержащий текстовые блоки и всё. Разумеется, могут возникнуть проблемы с корректурой претранслированного содержимого текстовых блоков, но, в зависимости от объема документа, прирост производительности все равно значительный.
Скачать обновленную версию макроса Translator 1.6.5, можно по ссылке — http://www.englishelp.ru/archives/soft/translator/Translator.zip.
Желаю удачи!
- LyuFi
- Сообщения: 18
- Зарегистрирован: Вт авг 26, 2008 16:16
-
- Сайт
Вернуться в Полезное программное обеспечение. Аллея Бродяги
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Макрос-переводчик
Обучим немецкому
языку по методу гестапо.
Работающие в иностранных компаниях сотрудники часто вынуждены готовить по два одинаковых отчета для отечественного и зарубежного своего начальства — на русском и английском языках. Цифры в этих отчетах, естественно, одинаковые, а меняются только подписи, заголовки и другой текст.
Такую задачу можно решить более изящно. Создаем новый лист в таком отчете и называем его «Словарь«. Выписываем на этот лист в любом порядке все слова, которые надо автоматически переводить. Для каждого языка добавляем новый столбец, например, так:
Потом переходим в редактор Visual Basic (меню Сервис — Макрос — Редактор Visual Basic), вставляем новый модуль (меню Insert — Module) и копируем туда текст вот этих двух макросов:
Sub Translate() Dim cell1 as Range, cell2 As Range Dim i as Long, Langs As Long Langs = 3 'количество языков перевода, включая русский For Each cell1 In ActiveSheet.Cells.SpecialCells(xlCellTypeConstants) For Each cell2 In Worksheets("Словарь").Cells.SpecialCells(xlCellTypeConstants) If cell1.Value = cell2.Value Then i = cell2.Column If i = Langs Then i = 1 Else i = i + 1 cell1.Value = Worksheets("Словарь").Cells(cell2.Row, i).Value GoTo 1 End If Next cell2 1: Next cell1 End Sub
Теперь можно вернуться на лист с отчетом и запустить макрос Translate через меню Сервис — Макрос — Макросы (Tools — Macro — Macros) или нажав ALT+F8. Все слова из вашего отчета, найденные в на листе Словарь, будут заменены на слова из соседней колонки, т.е. переведены на другой язык. Запуская макрос несколько раз, мы будем по кругу переводить наш отчет последовательно на русский-английский-немецкий-русский-английский-и т.д. Выглядеть это будет так:
Praktisch, nicht wahr?
Ссылки по теме
- Что такое макросы, куда вставлять код макроса на VBA, как их использовать
- Преобразование русского текста в транслит
Я пытаюсь разработать макрос для автоматического перевода текста на другой язык в Word. Макрос выбирает весь текст и отправляет его глубоко, открывая IE и предоставляя перевод.
Я хочу попытаться получить текст перевода без копирования и вставки. Для этого у меня есть:
function (text2translate,langOrigin,langEnd)
...
Set IEapp = CreateObject("InternetExplorer.Application") 'Set IEapp =InternetExplorer
myAddress = "https://www.deepl.com/translator#" & langOrigin & "/" & langEnd & "/"
myAddress = myAddress & text2translate
WebUrl = myAddress
With IEapp
.Silent = True 'No Pop-ups
.Visible = True 'Set InternetExplorer to Visible
.Navigate WebUrl 'Load web page
'Run and Wait, if you intend on passing variables at a later stage
Do While .Busy
DoEvents
Loop
Do While .ReadyState <> 4
DoEvents
Loop
Set myHTML = .Document
End With
...
end function
Все идет нормально. Передает текст в новое открытое окно IE. Теперь я могу копировать и вставлять.
Теперь я хотел бы пропустить эту последнюю копию и вставить и получить перевод, непосредственно вставленный в word (или excel) в определенном месте. Первое, что мне нужно сделать, это добавить перевод к переменной. Что я не могу сделать.
Я пытаюсь:
theData = myHTML.getElementsByClassName("lmt__textarea lmt__target_textarea lmt__textarea_base_style dl_disabled")
Dim mystring As String
mystring = theData.innerText
MsgBox mystring
Поскольку, согласно обозревателю разработчика Firefox, это имя элемента класса, в который встроен перевод. Тем не менее, текст перевода не отображается в HTML-коде. Что странно. Как я могу увидеть что-то в моем браузере, если это не является частью HTML-кода?
В любом случае последняя часть не работает.
Некоторые идеи?
Благодарю.
Обновление 1: После хорошего ответа от @Andy похоже, что getElementsByClassName возвращает коллекцию, и мне нужно пройти через эту коллекцию.
Dim element As Variant
For Each element In theData
myString = myString & element.innerText
Next
Я получаю сообщение об ошибке: «Объект, необходимый для каждого элемента в данных». Почему? Спасибо 2
2 ответа
Лучший ответ
Вот код для excel vba. вам не нужен DeepL.com, когда вы можете использовать Google
Option Explicit
#If Win64 Then '64?
Private Declare PtrSafe Function MsgBoxTimeout _
Lib "user32" _
Alias "MessageBoxTimeoutA" ( _
ByVal hwnd As LongPtr, _
ByVal lpText As String, _
ByVal lpCaption As String, _
ByVal wType As VbMsgBoxStyle, _
ByVal wlange As Long, _
ByVal dwTimeout As Long) _
As Long
#Else
Private Declare Function MsgBoxTimeout _
Lib "user32" _
Alias "MessageBoxTimeoutA" ( _
ByVal hwnd As Long, _
ByVal lpText As String, _
ByVal lpCaption As String, _
ByVal wType As VbMsgBoxStyle, _
ByVal wlange As Long, _
ByVal dwTimeout As Long) _
As Long
#End If
Public Sub Translate_Selection()
Dim IE As InternetExplorer
Dim URL As String
Dim Content As String
Dim SelectedRange As Range
Dim cel As Range
Dim celVal As String
Dim cmt As String
Dim ScriptEngine As ScriptControl
Set ScriptEngine = New ScriptControl
Call MsgBoxTimeout(0, "Please Wait for next pop-up message. Translation of selected range is in Progress.", "Translation In Progress", vbInformation, 0, 4000)
ScriptEngine.Language = "JScript"
ScriptEngine.AddCode "function encode(str) {return encodeURIComponent(str);}"
ScriptEngine.AddCode "function decode(str) {return decodeURIComponent(str);}"
Set SelectedRange = Application.Selection
For Each cel In SelectedRange.Cells
cel.Replace Chr(160), " ", xlPart
cel.Value = Trim(Application.WorksheetFunction.Clean(cel.Value))
Content = ""
If cel.Value <> "" And cel.Value <> " " And cel.Value <> Empty Then
Content = ScriptEngine.Run("encode", cel.Value)
URL = "https://translate.google.com/#auto/en/" & Content
'MsgBox URL
Set IE = New InternetExplorer
IE.Visible = False
IE.Navigate URL
Do Until IE.ReadyState = 4
DoEvents
Loop
Application.Wait (Now + TimeValue("0:00:3"))
Do Until IE.ReadyState = 4
DoEvents
Loop
If Content <> "" And Content <> " " And IE.Document.getElementsByClassName("tlid-translation translation")(0).innerText <> "" Then
Content = IE.Document.getElementsByClassName("tlid-translation translation")(0).innerText
cel.Value = ScriptEngine.Run("decode", Content)
End If
IE.Quit
Set IE = Nothing
End If
cmt = ""
If Not cel.Comment Is Nothing Then
cmt = ScriptEngine.Run("encode", cel.Comment.Text)
URL = "https://translate.google.com/#auto/en/" & cmt
Set IE = New InternetExplorer
IE.Visible = False
IE.Navigate URL
Do Until IE.ReadyState = 4
DoEvents
Loop
Application.Wait (Now + TimeValue("0:00:3"))
Do Until IE.ReadyState = 4
DoEvents
Loop
If cmt <> "" And cmt <> " " And IE.Document.getElementsByClassName("tlid-translation translation")(0).innerText <> "" Then
cmt = ScriptEngine.Run("decode", IE.Document.getElementsByClassName("tlid-translation translation")(0).innerText)
With cel
.ClearComments
.AddComment
.Comment.Text Text:=cmt
End With
End If
IE.Quit
Set IE = Nothing
End If
Next cel
Call MsgBoxTimeout(0, "Done...", "Task Completed", vbInformation, 0, 2000)
End Sub
Public Sub Translate_Page()
Dim IE As InternetExplorer
Dim URL As String
Dim Content As String
Dim LastCol As Long
Dim LastRow As Long
Dim yLooper As Long
Dim xLooper As Long
Dim cmt As String
Dim ScriptEngine As ScriptControl
Set ScriptEngine = New ScriptControl
ScriptEngine.Language = "JScript"
ScriptEngine.AddCode "function encode(str) {return encodeURIComponent(str);}"
ScriptEngine.AddCode "function decode(str) {return decodeURIComponent(str);}"
With Application.ActiveSheet
LastRow = .UsedRange.Rows.Count
LastCol = .UsedRange.Columns.Count
Call MsgBoxTimeout(0, "Please Wait for Next Pop-Up message. Translation of entire page is in progress. It will take approx." & (LastRow * LastCol * 3) / 60 & " minutes.", "Translation In Progress", vbInformation, 0, 8000)
For yLooper = 1 To LastRow
LastCol = .Cells(yLooper, Columns.Count).End(xlToLeft).Column
For xLooper = 1 To LastCol
.Cells(yLooper, xLooper).Replace Chr(160), " ", xlPart
.Cells(yLooper, xLooper).Value = Trim(Application.WorksheetFunction.Clean(Cells(yLooper, xLooper).Value))
.Cells(yLooper, xLooper).Select
Content = ""
If .Cells(yLooper, xLooper).Value <> "" And .Cells(yLooper, xLooper).Value <> " " And .Cells(yLooper, xLooper).Value <> Empty Then
Content = ScriptEngine.Run("encode", .Cells(yLooper, xLooper).Value)
URL = "https://translate.google.com/#auto/en/" & Content
Set IE = New InternetExplorer
IE.Visible = False
IE.Navigate URL
Do Until IE.ReadyState = 4
DoEvents
Loop
Application.Wait (Now + TimeValue("0:00:3"))
Do Until IE.ReadyState = 4
DoEvents
Loop
If Content <> "" And Content <> " " And IE.Document.getElementsByClassName("tlid-translation translation")(0).innerText <> "" Then
Content = IE.Document.getElementsByClassName("tlid-translation translation")(0).innerText
.Cells(yLooper, xLooper).Value = ScriptEngine.Run("decode", Content)
End If
IE.Quit
Set IE = Nothing
End If
cmt = ""
If Not .Cells(yLooper, xLooper).Comment Is Nothing Then
cmt = ScriptEngine.Run("encode", .Cells(yLooper, xLooper).Comment.Text)
URL = "https://translate.google.com/#auto/en/" & cmt
Set IE = New InternetExplorer
IE.Visible = False
IE.Navigate URL
Do Until IE.ReadyState = 4
DoEvents
Loop
Application.Wait (Now + TimeValue("0:00:3"))
Do Until IE.ReadyState = 4
DoEvents
Loop
If cmt <> "" And cmt <> " " And IE.Document.getElementsByClassName("tlid-translation translation")(0).innerText Then
cmt = ScriptEngine.Run("decode", IE.Document.getElementsByClassName("tlid-translation translation")(0).innerText)
With .Cells(yLooper, xLooper)
.ClearComments
.AddComment
.Comment.Text Text:=cmt
End With
End If
IE.Quit
Set IE = Nothing
End If
Next xLooper
Next yLooper
End With
Call MsgBoxTimeout(0, "Done...", "Task Completed", vbInformation, 0, 2000)
End Sub
0
Vishal
13 Июн 2019 в 13:16
Ты можешь попробовать:
' add data to input box
myHTML.getElementsbyClassName("lmt__textarea lmt__source_textarea lmt__textarea_base_style")(0).Value = "que paso"
' wait for answer
Do While IE.ReadyState <> 4 Or IE.Busy
DoEvents
Application.Wait Now + TimeValue("00:00:01")
Loop
' get answer
Set myHTML = IE.Document ' always reset .document after a change
theData = myHTML.getElementsByClassName("lmt__textarea lmt__target_textarea lmt__textarea_base_style")(0).innerText
(0)
в конце коллекции указывает, что вам нужен первый элемент в коллекции.
Также не забывайте сбрасывать myHTML = IE.Document
каждый раз при изменении окна
Я также просмотрел HTML-код в моем браузере Internet Explorer (не спрашивайте, почему я использую IE) и получил указанные выше строки для имен классов.
0
Kubie
2 Окт 2018 в 14:34
На форуме Microsoft был задан вопрос:
Необходимо в тексте Word введенное число преобразовать в текст на русском.
Для того, чтобы преобразовать некое число в текстовый формат, вы можете воспользоваться специальными программами, о которых я писал в заметке Число или сумма прописью.
Но если вам нужно преобразовать уже введенное число, то здесь может помочь следующий макрос (ниже).
В коде макроса используется формула с ключом CardText. Но у этого ключа есть ограничение — максимальное число не может быть больше 999.999 (см. заметку
Ключ CardText и его ограничения
). Поэтому автор макроса идет на хитрость и объединяет поля.
Но в английском языке нет склонений и результат для преобразованного числа получается правильным для чисел свыше 1.000.000 — используется слово «million». В русском языке итоговый результат будет выглядеть не очень красиво. Поэтому я чуть-чуть подредактировал макрос, заменив слово «million» на «миллион(а/ов)». Тоже не совсем нормально но, по крайней мере, не так режет глаз грамматической неправильностью.
Sub BigCardText() 'преобразование целого числа в текстовый эквивалент 'источник - http://wordtips.vitalnews.com/ Dim sDigits As String Dim sBigStuff As String sBigStuff = "" ' Select the full number in which the insertion point is located Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdMove Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend ' Store the digits in a variable sDigits = Trim(Selection.Text) If Val(sDigits) > 999999 Then If Val(sDigits) <= 999999999 Then sBigStuff = CStr(Val(sDigits) 1000000) ' Create a field containing the big digits and ' the cardtext format flag Selection.Fields.Add Range:=Selection.Range, _ Type:=wdFieldEmpty, Text:="= " + sBigStuff + " * CardText", _ PreserveFormatting:=True ' Select the field and copy it Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend sBigStuff = Selection.Text & " миллион(а/ов) " sDigits = Right(sDigits, 6) End If End If If Val(sDigits) <= 999999 Then ' Create a field containing the digits and the cardtext format flag Selection.Fields.Add Range:=Selection.Range, _ Type:=wdFieldEmpty, Text:="= " + sDigits + " * CardText", _ PreserveFormatting:=True ' Select the field and copy it Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend sDigits = sBigStuff & Selection.Text ' Now put the words in the document Selection.TypeText Text:=sDigits Selection.TypeText Text:=" " Else MsgBox "Число слишком большое для преобразования", vbOKOnly End If End Sub
Если вы не знаете, как подключить к документу и применить этот макрос, изучите следующие заметки с сайта:
Создание макроса из готового кода
Автоматическая запись макроса