Приведенный ниже макрос VBA Word запускается после выбора нескольких абзацев или для каждого примера. Я прилагаю пример файла .rtf, для которого запускается макрос.
Библейские ссылки в начале абзацев все получают пару вокруг них, кроме той, которая имеет гиперссылку. Мой макрос виноват или это проблема Word 2010.
В качестве дополнительной точки было бы полезно узнать, работает ли это на Office 365 (я пробовал то же самое на LibreOffice, и оно совпадает, даже если слово один с гиперссылкой
(^) ([A-Z123I] {1,3} [^] {1,15}) ([0-9] {1,3}: [0-9 - \ -] {1 , 7})
$ 1 $ 2 $ 3 $ 2 $ 3
Поэтому, пожалуйста, не предлагайте мне приложить какие-либо усилия, чтобы выяснить, должно ли это работать, или что я не пробовал другие настройки. Это было бы более полезно чтобы кто-то написал, что у него не получилось хотя бы показать, что они потратили время на загрузку файла макроса теста и фактически провели тест)
Private Sub RelRefWithBibleName_Click()
InSelection = False
If selection.Type = wdSelectionIP Then InSelection = True
If InSelection = True Then
MsgBox ("select some text")
Exit Sub
End If
selection.Find.ClearFormatting
selection.Find.Replacement.ClearFormatting
selection.Find.Replacement.Font.Reset
Application.ScreenUpdating = False
With selection
'Added this to make selection go beyond the start of the selected paragraph
'so that the detection would work
selection.MoveStartUntil Cset:=wdCharacter, Count:=wdBackward
strFindText = "([^13])([A-Z123I ]{1,3}[! ]{1,15} )([0-9]{1,3}:[0-9\-\–]{1,7})"
strReplaceText = "\1<ref>\2\3</ref>\2\3"
End With
With selection.Find
.MatchWildcards = True
.ClearFormatting
.Replacement.ClearFormatting
.text = strFindText
.Replacement.text = strReplaceText
.Format = False
.MatchWholeWord = True
.Forward = True
.Wrap = wdFindStop
End With
selection.Find.Execute Replace:=wdReplaceAll
selection.Shrink
selection.Move
Application.ScreenUpdating = True
selection.Find.ClearFormatting
selection.Find.Replacement.ClearFormatting
End Sub