VBA Macro для поиска текстовой строки и замены гиперссылкой работает только с английским текстом, но не с арабским - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть арабские тексты в Microsoft Word, которые мне нужны, чтобы ввести hpyerlinks для некоторых его слов.

Ответ на этот вопрос здесь работает для меня, но только для английских слов.Когда я заменяю слово «google» любой арабской строкой (будь то одно слово или несколько слов), макрос не работает.

Я могу правильно отображать арабские символы в VBA, , используя ответ наэтот вопрос здесь , поэтому нет проблем с отображением текста в макросе.

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

Само собой разумеется, арабский язык является регулируемым языком UTF-8.

Вот арабское слово для проверки:

كلمة

и вот макрос, который я использую, основываясь на приведенной выше ссылке:

Sub FindAndHyperlink()
    'define the style
    Dim strStyle As String
    strStyle = "Subtle Emphasis"
    'set the search range
    Dim rngSearch As Range
    Set rngSearch = ActiveDocument.Range
    'set the search string
    Dim strSearch As String
    strSearch = "google"
    'set the target address for the hyperlink
    Dim strAddress As String
    strAddress = "http:\\google.com"

    With rngSearch.Find
        Do While .Execute(findText:=strSearch, MatchWholeWord:=True, Forward:=True) = True
            With rngSearch 'we will work with what is found as it will be the selection
                ActiveDocument.Hyperlinks.Add Anchor:=rngSearch, Address:=strAddress
                .Style = ActiveDocument.Styles(strStyle) 'throw the style on it after the link
            End With
            rngSearch.Collapse Direction:=wdCollapseEnd
            'keep it moving
        Loop
    End With
End Sub

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

Вот снимок экрана с результатом после запуска макроса наАнглийская фраза из 3 слов (работает), затем заменяется одним арабским словом (не работает).

Macro results

РЕДАКТИРОВАТЬ 01

Я изменил свой макрос, основываясь на ответе @ Cindy_Meisterниже, но попытался сгруппировать символы в списке.В результате макрос работает, но с десятичными числами, а не с арабскими символами.

, чтобы добавить ссылки на фразу الأنبا غريغوريوس:

Вот обновленный макрос:

Sub FindAndHyperlink2()
'
' FindAndHyperlink2 Macro
'
'
'define the style
    Dim strStyle As String
    strStyle = "Subtle Emphasis"
    'set the search range
    Dim rngSearch As Range
    Set rngSearch = ActiveDocument.Range
    'set the search string
    Dim strSearch_list As String
    strSearch_list = "01575&01604&01571&01606&01576&01575&00032&01594&01585&01610&01594&01608&01585&01610&01608&01587"
    Dim strSearch As Variant
    strSearch = Split(strSearch_list, "&")

    For i = 0 To UBound(strSearch)
    With rngSearch.Find
    .Text = ChrW("&H" & Val(strSearch(i)))


    'set the target address for the hyperlink
    Dim strAddress As String
    strAddress = "http:\\google.com"


        Do While .Execute(findText:=strSearch_list, MatchWholeWord:=True, Forward:=True) = True
            With rngSearch 'we will work with what is found as it will be the selection
                ActiveDocument.Hyperlinks.Add Anchor:=rngSearch, Address:=strAddress
            End With
            rngSearch.Collapse Direction:=wdCollapseEnd
            'keep it moving
        Loop
    End With

    Selection.Find.Execute Replace:=wdReplaceAll

Next i

End Sub

но когда я применяю этот макрос к файлу MS Word, в котором есть как десятичный блок, так и арабский текст, обнаруживается, что десятичный блок - это тот, который был преобразован в ссылку, как на скриншотах ниже:

Снимок экрана до применения макроса:

Before applying the macro

Снимок экрана после применения макроса:

After applying the macro

Чего я хочу достичь: What I want to achieve

1 Ответ

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

Вы не предоставляете код, который вы использовали для поиска арабского термина, но на основе слова, размещенного в вопросе, проблема, по-видимому, связана с арабским RTL в документе LTR.Я не смог протестировать арабские символы в коде макроса - даже следуя инструкциям в предоставленной вами ссылке, мой редактор VBA отображает только ? - возможно, потому что у меня не установлен арабский IME ...

В любом случае мне удалось заставить его работать, используя десятичное числовое представление символов Unicode.Хитрость заключается в том, чтобы расположить их в обратном порядке (RTL) так:

strSearch = ChrW(1603) & ChrW(1604) & ChrW(1605) & ChrW(1577) 
'instead of ChrW(1577) & ChrW(1605) & ChrW(1604) & ChrW(1603)

Запрос был изменен, чтобы разрешить предоставлять десятичное число в виде строкового значения с разделителями.Это может быть разделено на массив, который зацикливается, чтобы поместить каждое значение в функцию ChrW, и они объединяются в строку поиска:

Dim strSearch As String, Word1 As String
Dim valWord1 As Variant
Dim i As Long
Word1 = "1603,1604,1605,1577"
valWord1 = Split(Word1, ",")
For i = LBound(valWord1) To UBound(valWord1)
    strSearch = strSearch & ChrW(valWord1(i))
Next
...