Статьи из блога

Статьи из блога

Поиск заголовков и вставка разрывов страниц перед ними

Алексей спрашивает:

Столкнулся со след. проблемой. Имеется документ на 25 000 стр. Этот документ получился в результате выгрузки из БД.

Как в этом документе сделать так чтобы определенные заголовки начинались с новой страницы, а не по окончании пред. текста. То есть, этот загловок начинается с середины, а мне нужно, чтобы с новой страницы.

Для начала вы должны определить, каким стилем у вас оформлены заголовки в тексте. Обычно это Заголовок 1, Заголовок 2 или другой стиль.

 

После того, как вы определили стиль заголовка, можете применить следующий макрос. Он ищет по тексту заголовки, оформленные стилем "Заголовок 1", а затем вставляет разрыв страницы перед найденным заголовком, оформленным этим стилем. Обратите внимание, что макрос ищет определенные заголовки, оформленные конкретным стилем - в примере это стиль "Заголовок 1". Если у вас эти заголовки оформлены другим стилем, или вообще не оформлены каким-либо стилем, то ничего изменено не будет.

Sub headBreak()
With Selection.Find
   .ClearFormatting
   .Replacement.ClearFormatting
   .Forward = True
   .Wrap = wdFindContinue
   .Text = ""
   .Style = ActiveDocument.Styles("Заголовок 1")
   .Execute
End With
Selection.Collapse wdCollapseStart
Selection.InsertBreak Type:=wdSectionBreakNextPage
End Sub

UPD: Либо воспользуйтесь советом, приведенным в комментариях Александром Витером (диалоговое окно "Абзац", вкладка "Положение на странице", установить флажок на параметре "с новой страницы").

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Еще записи по вопросам использования Microsoft Word:

Комментариев: 37

  1. 23.04.2009 в 10:01 | #1

    Если заголовки действительно оформлены стилями, то нужно просто в свойствах этого стиля поставить свойство «Начинать с новой страницы.»

  2. Моторокер
    24.04.2009 в 15:07 | #2

    Начинать с новой страницы

    Сразу же об этом подумал, только прочитав анонс в ридере.

    Если же надо искать определённые заголовки (например, Заголовок 1, в котором есть слово «Аларма»), то при поиске и замене нажать Больше, выбрать Формат - Стиль.

    P.S. Вместо двух капч можно поставить одну – dimoningru-captcha

  3. 24.04.2009 в 15:09 | #3

    Спасибо.

    Одна капча не справляется.

  4. Антон
    07.08.2009 в 12:00 | #4

    А если не оформлены эти заголовки совершенно никаким стилем? То как посоветуете поступить? Пробовал создать стиль заголовка и применить его к документу, но ничего не получилось, а ведь документов действительно много и приходится руками изза незнания может быть простых вещей, подскажите.

  5. 07.08.2009 в 12:08 | #5

    Антон, если не оформлены, то придется руками искать эти заголовки и применять к ним соответствующие стили.

    Зачем создавать стиль заголовока? Шаблон уже содержит предустановленные стили заголовков. Можете воспользоваться ими или подредактировать их по своему усмотрению.

    Почему у вас не получилось создать стиль и применить его? В чем трудность?

  6. 07.08.2009 в 12:13 | #6

    А если не оформлены эти заголовки совершенно никаким стилем? …

    Тогда это не заголовки, а просто текст. Word не знает, что это у вас заголовок. Нужно ему об этом сказать, т.е. оформить их стилем. Других вариантов нет. Или делать по-человечески, или мучаться с каждым документом.

    Другой вопрос, как оформить стилем. Если каждый ваш «заголовок» имеет совершенно четкое и оригинальное оформление, то можно макросом искать текст, оформленный нужным образом и применять к нему стиль нужного заголовка.

  7. Антон
    07.08.2009 в 12:36 | #7

    Спасибо за оперативность Антон Кокин и Александр Витер,честно говоря не ожидал! По поводу

    Если каждый ваш «заголовок» имеет совершенно четкое и оригинальное оформление, то можно макросом искать текст, оформленный нужным образом и применять к нему стиль нужного заголовка.
    очень в тему,значит мне необходимо найти подходящий стиль(на самом деле вид не должен менятся это плат.документ) и применить его к каждому похожему будущему заголовку, тогда вопрос, каккой макрос поможет мне найти заголовки и заменить их стиль, а затем начать следующее плат.поручение с новой строки? Заранее благодарен за помощь

  8. 07.08.2009 в 14:14 | #8

    Находить стиль не нужно. Выделите текст, оформленный как нужно, и на его основе создайте стиль. А макрос можно будет предложить, видя исходный документ

  9. Моторокер
    09.08.2009 в 14:59 | #9

    Антон
    А если не оформлены эти заголовки совершенно никаким стилем?

    Но как-то ведь они оформлены? Часто заголовки выделяют жирным. Ищите жирный текст и заменяйте на стиль Заголовок.

    Не оформлены жирным? По правилам точка в конце заголовка не ставится - ищите любую букву + знак абзаца.

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

    Одна капча не справляется.

    Поробуйте

    dimoning.ru-captcha

  10. darklumen
    28.09.2009 в 13:28 | #10

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

  11. 28.09.2009 в 14:00 | #11

    строку или абзац?

  12. 28.09.2009 в 14:02 | #12

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

    Sub selLine()
    'выделяем текущую строку (где находится курсор ввода)
       Selection.Bookmarks("\line").Select
    End Sub

  13. darklumen
    28.09.2009 в 14:09 | #13

    спасибо огромное.

    еще вопросик, скажите пожалуйста, как выделить в тексте все таблицы и оформить из одним стилем.

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

    извините, если не в том разделе спрашиваю.

  14. darklumen
    28.09.2009 в 23:03 | #14

    Sub Макрос1()
    '
    ' Макрос1 Макрос
    ' Макрос записан 28.09.2009 DarkLumen
    '
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        Selection.Find.Replacement.Style = ActiveDocument.Styles("Заголовок 1")
        Selection.Find.Replacement.ParagraphFormat.Borders.Shadow = False
        With Selection.Find
            .Text = "^$^p"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
    End Sub

    помогите пожалуйста. в макросах плохо разбираюсь, поэтому сначала записываю действие потом его редактирую. Здесь поиском нахожу символ буквы + символ абзаца и заменяю на стиль "заголовок 1". Проходит нормально. Заголовки становятся нужным стилем. Но когда запускаю занова макрос - заголовки обрамляются черной линией и это уже становится на "заголовок 1", а "заголовок+ 15рт и так далее". не могли бы объяснить, в чем дело? почему так происходит?

  15. 29.09.2009 в 10:47 | #15

    darklumen, удалите эту строку:

    Selection.Find.Replacement.ParagraphFormat.Borders.Shadow = False

  16. darklumen
    17.11.2009 в 13:38 | #16

    а что делать , если заголовок содержится на 2 и более строках. как выполнить выделение и форматирование более 1 строки?

    =)

  17. 17.11.2009 в 14:44 | #17

    У вас один заголовок разделен на две части знаком абзаца? С какой целью? Если это один заголовок (стиль), который просто продолжается естественным образом на второй и третьей строках, то он будет отформатирован как один заголовок.

    Либо же попытайтесь заменить знак абзаца на знак разрыва строки.

  18. darklumen
    17.11.2009 в 15:01 | #18

    нет, это один большой заголовок, не влезающий на 1 строку.

    скажем, я ищу необходимую строку по символу и знаку абзаца, чтобы применить стиль ко всему заголовку, но для этого мне необходимо выделить его весь.

  19. 17.11.2009 в 19:59 | #19

    чтобы применить стиль ко всему заголовку

    Ваш заголовок уже имеет стиль. Получается, вы хотите переопределить стиль для этого заголовка (текста, оформленного стилем заголовка)?

    В таком случае, мне непонятен вопрос. Вы сами, кстати, и отвечаете на него, сообщив, что:

    я ищу необходимую строку по символу и знаку абзаца

    Находите, выделяете и форматируете, как желаете. Уточните, что и как вы хотите получить?

  20. darklumen
    17.11.2009 в 21:20 | #20

    разобрался. спасибо. все понял.

    но пока разбирался появилось еще 2 вопросика:

    1) как преобразовать все буквы заголовка в прописные?

    2) и как сделать сквозную нумерацию заголовков без точки?

    извините, если достал расспросами!

  21. 17.11.2009 в 21:29 | #21

    1. Выбираете нужный стиль, заходите в его настройки (в опции Шрифт) и устанавливаете там опцию "Все прописные".

    2. Вам нужно опять же изменить стиль нумерации. Почитайте вот эту заметку на сайте - http://wordexpert.ru/page/stili-spiskov-v-redaktore-word-2007 (ну и первую часть, если у вас 2003 редактор.

  22. darklumen
    17.11.2009 в 22:53 | #22

    а скажите, что написать в макросе чтобы оглавление вставить именно на какую-то конкретную страницу?

  23. 18.11.2009 в 14:07 | #23

    А в чём проблема? В содержании или в конкретной странице? Вот так можно вставить оглавление с двумя уровнями заголовков в местоположение курсора:

    Selection.Fields.Add Selection.Range, wdFieldTOC, "\o ""1-2"" \u", False

  24. darklumen
    07.12.2009 в 23:37 | #24

    Простите, не подскажите как сделать перенос строк в макросе?

  25. darklumen
    08.12.2009 в 01:26 | #25

    и еще вопрос: как сделать резервное копирование, чтобы пользователь сам выбирал место куда сохранить исх файл.

    т.е: открываем файл - жмем макрос - текст дублируется на новый документ - появляется окно "сохранить как" - а дальше макрос выполняет свои какие-то действия....

    собственно, как обработать появления окна "сохранить как" в макросе?

    заранее благодарен. =)

  26. 08.12.2009 в 07:41 | #26

    Простите, не подскажите как сделать перенос строк в макросе?

    Поставьте нижнее подчеркивание после оператора и продолжайте код с новой строки.

  27. 08.12.2009 в 09:30 | #27

    …собственно, как обработать появления окна "сохранить как" в макросе?…

    Есть два варианта.

    Вариант 1. После нажатия кнопки «Сохранить» документ просто будет сохранён:

    With Dialogs(wdDialogFileSaveAs)
        .Name = ActiveDocument.Name
        .Show
      End With

    Вариант 2. Обладает большей гибкостью. Можно задать заголовок, расширения файлов, текст кнопки, вид окна. После положительного ответа на диалог, его результат можно обработать:

    With Application.FileDialog(msoFileDialogSaveAs)
        .Title = "Куда сохранять?"
        .AllowMultiSelect = False
        .ButtonName = "Сохраните, плиз"
        .InitialFileName = ActiveDocument.Name
        If .Show Then 'Если нажали кнопку «Сохраните, плиз»
          '…
        Else 'Если нажали «Отмена»
          '…
        End If
      End With

  28. darklumen
    08.12.2009 в 13:53 | #28

    спасибо огромное! )

  29. darklumen
    08.12.2009 в 13:54 | #29

    Простите, не подскажите как сделать перенос строк в макросе?

    Поставьте нижнее подчеркивание после оператора и продолжайте код с новой строки.

    я имел ввиду, как программно написать расстановку переносов в тексте? =)))))

  30. darklumen
    08.12.2009 в 15:31 | #30

    извините, я понимаю, что уже надоел всвоими вопросами, но у меня опять проблема с форматированием заголовков в тексте.

    Этим макросом я создаю свой стиль заголовка, приэтом применяется нумерация цифрами без точки.

    Sub CreateStyle()
        ActiveDocument.Styles.Add Name:="Стиль ГОСТ", Type:=wdStyleTypeParagraph
        ActiveDocument.Styles("Стиль ГОСТ").AutomaticallyUpdate = False
        With ActiveDocument.Styles("Стиль ГОСТ").Font
            .Name = "Times New Roman"
            .Size = 14
            .Bold = False
            .Italic = False
            .Underline = wdUnderlineNone
            .UnderlineColor = wdColorAutomatic
            .StrikeThrough = False
            .DoubleStrikeThrough = False
            .Outline = False
            .Emboss = False
            .Shadow = False
            .Hidden = False
            .SmallCaps = False
            .AllCaps = True
            .Color = wdColorAutomatic
            .Engrave = False
            .Superscript = False
            .Subscript = False
            .Scaling = 100
            .Kerning = 0
            .Animation = wdAnimationNone
        End With
        With ActiveDocument.Styles("Стиль ГОСТ").ParagraphFormat
            .LeftIndent = CentimetersToPoints(2.54)
            .RightIndent = CentimetersToPoints(0)
            .SpaceBefore = 0
            .SpaceBeforeAuto = False
            .SpaceAfter = 18
            .SpaceAfterAuto = False
            .LineSpacingRule = wdLineSpace1pt5
            .Alignment = wdAlignParagraphJustify
            .WidowControl = True
            .KeepWithNext = False
            .KeepTogether = False
            .PageBreakBefore = True
            .NoLineNumber = False
            .Hyphenation = True
            .FirstLineIndent = CentimetersToPoints(-1.27)
            .OutlineLevel = wdOutlineLevel1
            .CharacterUnitLeftIndent = 0
            .CharacterUnitRightIndent = 0
            .CharacterUnitFirstLineIndent = 0
            .LineUnitBefore = 0
            .LineUnitAfter = 0
        End With
        ActiveDocument.Styles("Стиль ГОСТ").NoSpaceBetweenParagraphsOfSameStyle _
            = False
        ActiveDocument.StylesСтиль ГОСТ").ParagraphFormat.TabStops.ClearAll
        With ActiveDocument.Styles("Стиль ГОСТ").ParagraphFormat
            With .Shading
                .Texture = wdTextureNone
                .ForegroundPatternColor = wdColorAutomatic
                .BackgroundPatternColor = wdColorAutomatic
            End With
            .Borders(wdBorderLeft).LineStyle = wdLineStyleNone
            .Borders(wdBorderRight).LineStyle = wdLineStyleNone
            .Borders(wdBorderTop).LineStyle = wdLineStyleNone
            .Borders(wdBorderBottom).LineStyle = wdLineStyleNone
            With .Borders
                .DistanceFromTop = 1
                .DistanceFromLeft = 4
                .DistanceFromBottom = 1
                .DistanceFromRight = 4
                .Shadow = False
            End With
        End With
        ActiveDocument.Styles("Стиль ГОСТ").LanguageID = wdRussian
        ActiveDocument.Styles("Стиль ГОСТ").NoProofing = False
        ActiveDocument.Styles("Стиль ГОСТ").Frame.Delete
    End Sub

    --------------------------------------

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

    НО в результате, отступы все поехали, нумерация не проставлена. Макросы делал макрорекодером, все нормально было. В чем проблема? Голова уже не соображает.. =(((

    Sub StyleUse()
    '
    ' Макрос1 Макрос
    ' применение стиля к заголовкам'
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        Selection.Find.Replacement.Style = ActiveDocument.Styles("Стиль ГОСТ")
        
        With Selection.Find
            .Text = "^$^p"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
    End Sub

  31. 08.12.2009 в 16:19 | #31

    я имел ввиду, как программно написать расстановку переносов в тексте? =)))))

    Согласитесь, перенос строк и расстановка переносов немного разные вещи. :)

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

    ActiveDocument.AutoHyphenation = True

    Или вы что-то другое имели в виду?

  32. darklumen
    08.12.2009 в 16:24 | #32

    именно это! огромное спасибо.

    и прошу прощения за мое неумение излагать свои мысли!=))))

  33. 08.12.2009 в 16:40 | #33

    darklumen, в записанных макросах я не нашёл строк, которые добавляют нумерацию к заголовками. К сожалению, не всё, что вы делаете, записывается макрорекордером.

    Я, честно говоря, никогда программно стили не создавал и нумерацию не задавал, но попробую разобраться.

  34. 08.12.2009 в 16:48 | #34

    darklumen, а с какой целью вы создаете стиль программно? Вам это нужно для шаблона (нумерованные заголовки по ГОСТу)?

    И как у вас оформлены заголовки в тексте, которые вы ищете? В макросе это не определено.

  35. darklumen
    08.12.2009 в 22:17 | #35

    ГОСТ 7.1-2003 «Общие требования к текстовым документам»

    Подчеркивать заголовки не допускается. Слова в заголовках не переносятся, точки в конце не ставятся. Заголовки пишутся без кавычек.

    Разделы имеют порядковые номера в пределах всей записки. Заголовки разделов (глав) пишутся прописными буквами. Обозначаются арабскими цифрами без точки 1, 2 и т.д. и начинаются с абзацного отступа (1,27 см). Расстояния между текстом и заголовками равно двум 1,5-м интервалам.Каждый раздел пояснительной записки рекомендуется начать с нового листа.

    вот примерно это я и пытаюсь сделать в макросе. т.е. как я понимаю, сначала мы создаем свой стиль, соответвующий параметрам. Затем ищем заголовки по любой букве и знаку абзаца (без точки). и к тому, что найдено в документе применяем этот стиль.

    может я слишком все усложняю и есть другое решение?

  36. 08.12.2009 в 22:26 | #36

    Думаю, что усложняете. Я тоже работаю по ГОСТу и у меня давным давно сделан шаблон с нужными заголовками, нумерацией заголовков. Кстати, об этом я даже написал заметку: http://wordexpert.ru/page/sozdanie-stiley-dlya-zagolovkov-i-mnogourovnevyih-spiskov-v-word

  37. Миша
    07.03.2012 в 14:29 | #37

    Для форматирования заголовков совсем не нужно выделять строку, это можно сделать с помощью "горячих клавиш": 1. установите курсор на строке, где должен быть заголовок. 2. нажмите комбинацию клавиш: "Alt"+ "1"(ряд цифр в верху) (цифра 1= заголовок первого типа, цифра 2= второго, 3=третьего). PS: для ворда версий 2000-2003 (в 2007 не пробовал)

Оставьте комментарий!

(обязательно)

^ Наверх