Word Макрос: Назначить язык тексту

Автор Anton, 02 июня 2017, 15:13

Anton

Добрый день!
Как назначить язык тексту: русский - русский, английски - английский и т.п. Нашел код, вот только он не работает:

Sub Макрос1()

With ActiveDocument
    .LanguageDetected = False
    .DetectLanguage
End With

End sub


Пример приложил.

[вложение удалено администратором]

Администратор

Предположу, что макрос, который вы представили в первом сообщении, не работает. Предположу, что это брак в программе "Word".

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

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

Символам в ворде присваивается язык, когда текст вставляется в файл:
1) когда юзер печатает
2) когда текст вставляется из буфера обмена

Когда юзер печатает текст, то ворд берёт язык из языка клавиатуры. Например, если у клавиатуры язык русский и юзер печатает, то символу присваивается русский язык.

И второе. Когда из буфера. Здесь ворд уже как-то определяет язык вставляемого текста. Какой-то механизм у ворда есть.
Если в момент вставки английского текста у клавиатуры русский язык, ворд сделает текст английским.
Например, я скопировал из интернета текст в программу блокнот: Analyzes the specified text to determine the language that it is written in. Затем перехожу в ворд, делаю у клавиатуры язык русский, вставляю текст из блокнота в ворд и ворд придаёт вставленному тексту английский язык.

А вот с немецким языком так не получилось. Я вставил в блокнот текст: Analysiert den angegebenen Text, um die Sprache zu bestimmen, in der er geschrieben ist. Затем перешёл в ворд, сделал у клавиатуры язык русский, вставил текст. Ворд принял его за английский. А если перед вставкой сделать немецкий язык, то вставляется правильно.

Таким образом, ворд не может отличить английский от немецкого, т.к. у символов одинаковые юникод-коды.

Таким образом, ворд достоверно присваивает тексту язык при печати. В этом случае ворд просто смотрит язык клавиатуры.

Anton

Жаль, что все так сложно. А можно ли установить язык проверки правописания хотя бы для 2 вариантов: английского и русского?

Администратор

Что вы подразумеваете под "установить язык проверки правописания"? Как это делается в программе "Word" без макросов?

Anton

Язык - Язык проверки правописания - Нужный язык. Но я то вижу, что на русский текст нужно назначить русский язык, на английский - английский. И вот хочется, чтобы это все чтобы делалось автоматически.

Администратор

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

Макрос
Sub Макрос()

    '1. Делаем весь текст русским, чтобы некоторые символы: точки, запятые и другие были на русском языке.
    ActiveDocument.Range.LanguageID = wdRussian
   
    '2. Исправление английского текста.
    With ActiveDocument.Range.find
        ' {1;} - может это ускорит макрос. Чтобы язык менялся не по одному символу, а сразу по нескольким.
        .text = "[A-Za-z]{1;}"
        .Replacement.LanguageID = wdEnglishUS
        .MatchWildcards = True
        .Execute Replace:=wdReplaceAll
    End With

End Sub
[свернуть]

Anton

Да, это работает! Большое спасибо!

И я так понимаю, что таким способом немецкий или французский или другой язык невозможно будет определить?

Администратор

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

Anton

А можно как-то все-таки определять к примеру, немецкий для абзаца, если найти в параграфе, допустим, парочку умляутов? И во французском есть символы, которых нет в других. Я понимаю, что это все с какой-то долей вероятности, но задача ведь интересная.

Администратор

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

Например, слово "text" так выглядит на трёх языках:
английский - text
немецкий - text
французский - texte

Таким образом, макрос не может понять, к какому языку относится слово.