1

Тема: Как определить: символ из латиницы или кириллицы

Добрый день!
Общая проблема: подмена кириллических символов латиницей и наоборот
Задача: определить в слове, какие и сколько символов - кириллица/латиница. Соответственно определить язык - рус/англ.
Затем заменить кириллицу латиницей и наоборот.
Мне кажется для этого необходимо узнать, что собой представляет текущий (где установлен курсор) символ. Каков его код. Попадает ли он в диапазон латиницы или кириллицы в юникоде.

Отредактировано Денис (29.01.2010 00:13:34)

2

Re: Как определить: символ из латиницы или кириллицы

В качестве базового метода могу предложить такой:

Sub EnglishOrNot()
  Dim oCh As Range
  Dim Lang As String
  
  For Each oCh In Selection.Characters
    Lang = "Знак"
    If oCh.Text Like "[A-" & ChrW(601) & "]" Then
      Lang = "Латинский символ"
    ElseIf IsNumeric(oCh.Text) Then
      Lang = "Цифра"
    ElseIf oCh.Text Like "[А-" & ChrW(1257) & "]" Then
      Lang = "Кириллический символ"
    End If
    MsgBox Lang & vbCr & "Символ: """ & oCh.Text & """" & vbCr & "Код символа: " & AscW(oCh.Text)
  Next
  
End Sub

Выделите текст и запустите макрос

Лучше день потерять — потом за пять минут долететь!

3

Re: Как определить: символ из латиницы или кириллицы

viter.alex пишет:

В качестве базового метода могу предложить такой...

Странные у вас наборы букв, некоторые и не буквы даже.

По моему, так вернее:

Буквы кириллицы:
Unicode Cirillic: ChrW$(&H400) & "-" & ChrW$(&H4FF)
Unicode Cyrillic Supplement: ChrW$(&H500) & "-" & ChrW$(&H523)

Буквы латиницы:
Unicode Basic Latin: ChrW$(&H41) & "-" & ChrW$(&H5A)
Unicode Latin Extended-A: ChrW$(&H61) & "-" & ChrW$(&H7A)
Unicode Latin Extended-B: ChrW$(&H100) & "-" & ChrW$(&H24F)

Макросы под заказ и готовый пакет - mtdmacro.ru

4

Re: Как определить: символ из латиницы или кириллицы

Где там  не буквы?

Лучше день потерять — потом за пять минут долететь!

5

Re: Как определить: символ из латиницы или кириллицы

viter.alex пишет:

Где там  не буквы?

Чтобы убедиться, попробуй этот макрос на символах  “[“, “]”, “{“, “}”
Откуда в макросе взялись коды 601 и 1257 вообще непонятно.

PDF-файлы со всеми наборами символов стандарта Unicode можно найти на сайте внешняя ссылка
В Word, для просмотра символов Unicode, нужно в окне «Символ» (вставка символа) выбрать шрифт «Arial Unicode MS»

Макросы под заказ и готовый пакет - mtdmacro.ru

6

Re: Как определить: символ из латиницы или кириллицы

Друзья!
Спасибо за помощь - дело сдвинулось.

viter.alex пишет:

"[A-" & ChrW(601) & "]"

Подскажите, данный код соотносит текущий символ с диапазоном латинских, а ниже кириллических символов, я правильно понял?

7

Re: Как определить: символ из латиницы или кириллицы

Понял ты правильно, только я неправильно записал. Учитывая замечание Вождя, следует переписать

Sub EnglishOrNot()
  Dim oCh As Range
  Dim Lang As String
  
  For Each oCh In Selection.Characters
    Lang = "Знак"
    If oCh.Text Like "[A-Za-z" & ChrW(&H100) & "-" & ChrW(&H24F) & "]" Then
      Lang = "Латинский символ"
    ElseIf IsNumeric(oCh.Text) Then
      Lang = "Цифра"
    ElseIf oCh.Text Like "[Ё-" & ChrW(&H4F9) & "]" Then
      Lang = "Кириллический символ"
    End If
    MsgBox Lang & vbCr & "Символ: """ & oCh.Text & """" & vbCr & "Код символа: " & AscW(oCh.Text)
  Next
  
End Sub

Коды символов брал из таблицы символов, входящей в состав Windows для шрифта Arial Unicode MS

Лучше день потерять — потом за пять минут долететь!

8

Re: Как определить: символ из латиницы или кириллицы

Здравствуйте!

"Доброжелатели" обработали мой документ Методичкой. В результате чего возникла такая ситуация, текст который изначально был латинским набора символов, например, "е7еf3еаd1b3" стал визуально выглядеть как исходный, но символы e и a изменились на  кириллические.
"Пометить выбранный текст как аглийский" не решает вопрос, нет идентичности с изначальной строкой.

Подскажите неужели в даннос случае надо писать массив соответствий для каждого символа?

9

Re: Как определить: символ из латиницы или кириллицы

Ввели меня в сложности  кодовые страницы lol
А нужна обычная замена, почти как здесь: Псевдокириллица: макрос замены латиницы на кириллицу