Макрос для замены символов на код Unicode, работающий только частично - PullRequest
0 голосов
/ 28 ноября 2018

Я написал макрос для замены арабских букв на соответствующий им код UTF и добавления к ним префикса и суффикса.Я хочу использовать этот макрос для дальнейшего развития.

Например, слово كلمة необходимо будет изменить:

كلمة

Это означает, что каждый арабскийбуква получила &#x перед номером Юникода, а затем получила ; после нее.

Я написал макрос ниже, который отлично работает для символов, код которых состоит из всех чисел, например 0627 или0628.Но для букв, которые имеют английскую букву, макрос не работает.например, 062A и 062B.Независимо от того, написал ли я 062a или 062A, оба не работают.

Мне нужна помощь, чтобы найти ошибку в макросе, которая делает его работающим только для букв с блоком unicode со всеми цифрами, в то время как нене работает с другими буквами.

Заранее спасибо.

Sub test1()
'
' test1 Macro
'
'
Dim characters_to_find_list As String
characters_to_find_list = "0627,0623,0625,0628,062A,062B,062C"

Dim characters_to_replace_list As String
characters_to_replace_list = "0627,0623,0625,0628,062A,062B,062C"

Dim characters_to_find As Variant
characters_to_find = Split(characters_to_find_list, ",")

Dim characters_to_replace As Variant
characters_to_replace = Split(characters_to_replace_list, ",")

For i = 0 To UBound(characters_to_find)

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting

With Selection.Find

.Text = ChrW("&H" & Val(characters_to_find(i)))
.Replacement.Text = "&#x" & ("&H" & Val(characters_to_replace(i)) & ";")
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = True
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = True
.MatchControl = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

Next i


End Sub

РЕДАКТИРОВАТЬ: Вот пример текста, состоящего из символов, которые я имею в макросекак тест (полный макрос будет содержать весь арабский алфавит):

ا أ ب ا ت إ ث أ ج ا أ ب ا ت إ ث أ ج ا أ ب ا ت إ ث أ ج ا أ ب ا ت إ ث أ ج ا أ ب ا ت إ ث أ ج ا أ ب ا ت إ ث أ ج.

Вот результат после запуска моего макроса, вы можете увидеть, что некоторые символы не были преобразованы.Символы, которые не были преобразованы, - это символы с английскими буквами в их блоке Unicode:

Test Results

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

Например: буква ا (в верхнем левом углу таблицы) имеет юникод 0623, она правильно конвертируется, а буква ت (третья строка в таблице) имеет юникод 062A, это не будет конвертировать.

Спасибо

1 Ответ

0 голосов
/ 28 ноября 2018

Юникод может быть представлен в Word VBA с использованием шестнадцатеричных кодов, таких как 062A, или в виде десятичного числа, такого как 1579.

Один из способов определения эквивалента десятичного числа состоит в том, чтобы выбрать символ в Word и запустить его в «Немедленном окне» (ctrl + G в редакторе VBA):

?AscW(Selection.text)

Другой способ - вычислитьЭто или использовать конвертер.

Это значение может быть использовано в качестве текста поиска:

With Selection.Find
  .Text = ChrW(1579)
  'and so on...
...