Здравствуйте.
Есть в документе word метки которые макросом заменяются на названия. Например метка <NUMBER находится скриптом и заменяется на TEST-001. Но когда включена опция track changes , то значение подставляется и метка отображается рядом как зачёркнутая. Т.е. получается вот так: TEST-001<NUMBER. Проблема в том что при повторном запуске макроса метка находится снова и макрос дублирует названия.
Вот код который ищет метки:
Private Function FindSearchMark(ByVal rngStory As Range) As Boolean
With rngStory.Find
.ClearFormatting
.Wrap = wdFindStop
.Forward = True
.MatchCase = False
.MatchWildcards = False
.MatchWholeWord = False
.Execute FindText:="<"
FindSearchMark = .found
....
End With
End Function
Вопрос в том как пропустить при поиске изменения отслеживаемые вордом ?
Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, SAVe, Вы писали:
SAV>>Вопрос в том как пропустить при поиске изменения отслеживаемые вордом ?
Vi2>Навскидку, текст будет зачёркнутым и, следовательно, не должен рассматриваться в качестве метки.
Я пробовал добавить в поиск .Font.StrikeTrough = False. Но ворд не считает это зачёркнутым текстом и метка всё равно находится. Он становится зачёркнутым только если я явно применю стиль к тексту. Внешне метка выглядит так же (зачеркнутой), но ещё появляется нотификация о том что я внёс изменение в документ. В этом случае метка пропускается поиском.
Здравствуйте, SAVe, Вы писали:
SAV>Я пробовал добавить в поиск .Font.StrikeTrough = False. Но ворд не считает это зачёркнутым текстом и метка всё равно находится. Он становится зачёркнутым только если я явно применю стиль к тексту. Внешне метка выглядит так же (зачеркнутой), но ещё появляется нотификация о том что я внёс изменение в документ. В этом случае метка пропускается поиском.
Range незачёркнутого и зачёркнутого должен отличаться. Вот в данном случае есть поле Revisions, которое в одном случае не имеет элементов, а во втором — имеет.
Vi2>Range незачёркнутого и зачёркнутого должен отличаться. Вот в данном случае есть поле Revisions, которое в одном случае не имеет элементов, а во втором — имеет.
Спасибо за подсказку. Я сделал так (поменял в вызывающей функции):
Private Sub SearchAndReplaceInStory(ByVal regArray As Variant, ByVal rngStory As Word.Range, ByVal storyType As Integer)
Do While FindSearchMark(rngStory)
rngStory.Select
rngStory.Collapse Direction:=wdCollapseEnd
If rngStory.Revisions.count = 0 Then
HandleSelectedSearchMark regArray, storyType
End If
Loop
End Sub
Но макрос ведёт себя как то странно...
Если я не ставлю точку прерывания на строке:
Do While FindSearchMark(rngStory)
....
всё работает. После первого выполнения макроса
rngStory.Revisions.count = 1
для метки. Но если я убираю breakpoint с этой строки и ставлю например на
HandleSelectedSearchMark regArray, storyType
макрос перестаёт работать. Т.е. Он работает как до изменения и
rngStory.Revisions.count
всегда 0. То же самое если вообще не ставлю точки прерывания. Пробовал сохранять , переоткрывать документ. Не помогает. Получается что макрос работает как ожидается только в режиме отладки и то только если breakpoint в нужном месте.
Раньше с макросами для ворда и VBA никогда не приходилось работать. Поэтому понятия не имею с чем это может быть связано. Есть ли какие либо идеи ?