Я написал макрос для замены арабских букв на соответствующий им код 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:
Присутствует блок Unicode каждой арабской буквына этой странице Википедии.пожалуйста, нажмите здесь, чтобы увидеть его. Любой символ с английскими буквами в нем не будет конвертироваться с использованием моего макроса.
Например: буква ا
(в верхнем левом углу таблицы) имеет юникод 0623
, она правильно конвертируется, а буква ت
(третья строка в таблице) имеет юникод 062A
, это не будет конвертировать.
Спасибо