Используйте VBA для замены строк RegEx гиперссылками в Word - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь выполнить поиск по текстовому документу и заменить совпадения с регулярными выражениями серией статических гиперссылок.

Например, если я получу совпадение с регулярным выражением для "A-1", я хочу заменить "A-1" строка с гиперссылкой с Anchor = "A-1" и Address = "https://www.my_website.com/A-1".Мои совпадения с RegEx могут быть "A-1", "A-2", "A-3", etc.

Я знаком с RegEx, но я очень плохо знаком с VBA.Что у меня есть до сих пор:

Sub FindAndHyperlink()

    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")

    RegEx.Global = True
    RegEx.Pattern = "([A][\-])([0-9])"

    Set Matches = RegEx.Execute(ActiveDocument.Range.Text)
    For Each Match In Matches
        ActiveDocument.Range.Text = RegEx.Replace(ActiveDocument.Range.Text, (ActiveDocument.Hyperlinks.Add Anchor:=Match, Address:="https://www.my_website.com/" & Match))
    Next

End Sub

Это не компилируется, потому что он ожидает ) после ActiveDocument.Hyperlinks.Add.

Я думаю, проблема в том, что метод RegEx.Replace()ожидая (String, String) аргументов, а не (String, Hyperlink object), но я не уверен, что лучший способ обойти это.

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Я только что проверил это, и оно работало нормально для меня.

([a-z _:/.A-Z-1-9]+)

enter image description here

Обратите внимание на верхний регистр и нижний регистр, плюс 1-9 (от одного до девяти включительно), а также такие символы, как косая черта и точка.

0 голосов
/ 18 октября 2018

Попробуйте:

Sub FindAndHyperlink()
Application.ScreenUpdating = False
Const HLnk As String = "https://www.my_website.com/"
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "A-[0-9]{1,}"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchWildcards = True
    .Execute
  End With
  Do While .Find.Found
    .Hyperlinks.Add Anchor:=.Duplicate, Address:=HLnk & .Text, TextToDisplay:=.Text
    .Start = .Hyperlinks(1).Range.End
    .Find.Execute
  Loop
End With
Application.ScreenUpdating = True
End Sub
...