Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
For i = 1 To 100
Selection.Find.Style = ActiveDocument.Styles("Заголовок 1")
With Selection.Find
.Text = ""
.Replacement.Text = "": .Forward = True: .Wrap = wdFindStop: .Format = True: .MatchCase = False
End With
Selection.Find.Execute
If Selection.Find.Found = False Then GoTo Enn
Selection.HomeKey Unit:=wdLine
Selection.TypeText Text:="Zag1"
Selection.MoveDown Unit:=wdLine, Count:=1
Next i
Enn:
Как пометить заголовки в Ворде
Вот такая задача. В документе есть заголовки 1, 2, 3 и 4-го уровня ( и неск. др. используемых стилей). Для последующей обработки в программе верстки я сделал макрос, который ищет заголовок каждого из этих уровней и в начале каждого вписывает метку-тег Zag1, Zag2, Zag3 и Zag4 (в верстке по этим меткам я в авторежиме расставляю стили). Есть и другие типы тегов к другим типам оформления (но это уже детали). На мой взгляд, я написал это довольно примитивно:
Не очень ясен смысл цикла For i = 1 To 100
Код:
If Selection.Find.Found = False Then GoTo Enn
''' пререходит по метке за пределы цикла.
''' пререходит по метке за пределы цикла.
Код:
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Style = ActiveDocument.Styles("Заголовок 1")
With Selection.Find
.Text = ""
.Replacement.Text = "": .Forward = True: .Wrap = wdFindStop: .Format = True: .MatchCase = False
End With
Selection.Find.Execute
While Selection.Find.Found
Selection.HomeKey Unit:=wdLine
Selection.TypeText Text:="Zag1"
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.Find.Execute
Wend
Selection.Find.ClearFormatting
Selection.Find.Style = ActiveDocument.Styles("Заголовок 1")
With Selection.Find
.Text = ""
.Replacement.Text = "": .Forward = True: .Wrap = wdFindStop: .Format = True: .MatchCase = False
End With
Selection.Find.Execute
While Selection.Find.Found
Selection.HomeKey Unit:=wdLine
Selection.TypeText Text:="Zag1"
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.Find.Execute
Wend
Пишу прямо здесь, без компиляции, так что заранее извиняюсь за возможные синтаксические ошибки.
Цитата:
плохая привычка и дурная манера
Это я чувствовал всегда. Но это крайняя мера, что бы хоть чего-то делалось. Ваш вариант, ессно, красивее и логичнее.
А вот можно ли измерить время выолнения макроса? (Мне показалось, что вариант c [COLOR="Navy"]While - Wend[/COLOR] сработал побыстрее, чем мой убогий с [COLOR="Navy"]If... than goto.[/COLOR]). А то ж я не знаю операторов, возвращающих "время", впрочем и кучю других тоже :o )
Цитата: Dmitry2064
А вот можно ли измерить время выолнения макроса?
Конечно.
В начале макроса:
Dim TStart As Date, TEnd As Date
TStart = Now
В конце макроса:
TEnd = Now
Msgbox Format(TEnd - TStart, "h:mm:ss")