title | keywords | f1_keywords | ms.prod | ms.assetid | ms.date | ms.localizationpriority |
---|---|---|---|---|---|---|
Sections object (Word) |
vbawd10.chm2394 |
vbawd10.chm2394 |
word |
cf6f77ba-9eee-5614-e697-bc031c4c6dcd |
06/08/2017 |
medium |
Sections object (Word)
A collection of Section objects in a selection, range, or document.
Remarks
Use the Sections property to return the Sections collection. The following example inserts text at the end of the last section in the active document.
With ActiveDocument.Sections.Last.Range .Collapse Direction:=wdCollapseEnd .InsertAfter "end of document" End With
Use the Add method or the InsertBreak method to add a new section to a document. The following example adds a new section at the beginning of the active document.
Set myRange = ActiveDocument.Range(Start:=0, End:=0) ActiveDocument.Sections.Add Range:=myRange myRange.InsertParagraphAfter
The following example displays the number of sections in the active document, adds a section break above the first paragraph in the selection, and then displays the number of sections again.
MsgBox ActiveDocument.Sections.Count & " sections" Selection.Paragraphs(1).Range.InsertBreak _ Type:=wdSectionBreakContinuous MsgBox ActiveDocument.Sections.Count & " sections"
Use Sections (index), where index is the index number, to return a single Section object. The following example changes the left and right page margins for the first section in the active document.
With ActiveDocument.Sections(1).PageSetup .LeftMargin = InchesToPoints(0.5) .RightMargin = InchesToPoints(0.5) End With
Methods
Name |
---|
Add |
Item |
Properties
Name |
---|
Application |
Count |
Creator |
First |
Last |
PageSetup |
Parent |
See also
Word Object Model Reference
[!includeSupport and feedback]
Multiple objectsSections
Multiple objects
A collection of Section
objects in a selection, range, or document.
Using the Sections Collection
Use the Sections property to return the Sections collection. The following example inserts text at the end of the last section in the active document.
With ActiveDocument.Sections.Last.Range
.Collapse Direction:=wdCollapseEnd
.InsertAfter "end of document"
End With
Use the Add
method or the InsertBreak
method to add a new section to a document. The following example adds a new section at the beginning of the active document.
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
ActiveDocument.Sections.Add Range:=myRange
myRange.InsertParagraphAfter
The following example displays the number of sections in the active document, adds a section break above the first paragraph in the selection, and then displays the number of sections again.
MsgBox ActiveDocument.Sections.Count & " sections"
Selection.Paragraphs(1).Range.InsertBreak _
Type:=wdSectionBreakContinuous
MsgBox ActiveDocument.Sections.Count & " sections"
Use Sections(index), where index is the index number, to return a single Section object. The following example changes the left and right page margins for the first section in the active document.
With ActiveDocument.Sections(1).PageSetup
.LeftMargin = InchesToPoints(0.5)
.RightMargin = InchesToPoints(0.5)
End With
- Remove From My Forums
-
Вопрос
-
Hello. I am somewhat inexperienced with VBA so I would greatly appreciate someone’s assistance.
The following code does exactly what I need it to, by printing all of the text within the section in the document identified in the code (Sections 1 and 2), and none of the text in the subsequent section (Section 3) that happens to fall on the
same physical page as Section 2:Sub PrintSections()
Dim r As Range
Dim RangeStart As Long
Dim RangeEnd As LongRangeStart = ActiveDocument.Sections(1).Range.Start
RangeEnd = ActiveDocument.Sections(2).Range.End
Set r = ActiveDocument.Range(RangeStart, RangeEnd)r.Select
ActiveDocument.PrintOut Range:=wdPrintSelection
End SubMy challenge is this: I wish to print Section 4 of the document the same way. So, how can I use the code above to print Sections 1, 2 and 4 (skip Section 3)? Again, I cannot use the Print function in Word by entering «s1, s2, s4»
because it prints the text in Section 3 that falls on the same physical page as Section 2, and doing so also fails to print the text is Section 4 that happens to fall on the same physical page as Section 3.I hope I’ve explained that well. Please let me know if I have not.
Thank-you for your assistance.
Ответы
-
You could hide section 3:
Sub PrintSections124() Dim RangeStart As Long Dim RangeEnd As Long Dim PrintHidden As Boolean ' Save current setting of Print Hidden Text PrintHidden = Application.Options.PrintHiddenText ' Hide section 3 ActiveDocument.Sections(3).Range.Font.Hidden = True ' Find start and end of range to be printed RangeStart = ActiveDocument.Sections(1).Range.Start RangeEnd = ActiveDocument.Sections(4).Range.End ' Select range ActiveDocument.Range(RangeStart, RangeEnd).Select ' Print it ActiveDocument.PrintOut Range:=wdPrintSelection ' Unhide section 3 ActiveDocument.Sections(3).Range.Font.Hidden = False ' Restore original setting Application.Options.PrintHiddenText = PrintHidden End Sub
Regards, Hans Vogelaar (http://www.eileenslounge.com)
-
Помечено в качестве ответа
28 сентября 2015 г. 14:02
-
Помечено в качестве ответа
В этой статье мы рассмотрим коллекцию Sections и ее объекты Section, которые предоставляют разделы документа Word. Существует тонкая грань между разделами и страницами документа, так, в созданном документе существует только один раздел, при желании можно добавить еще несколько, однако количество страниц может быть или равным количеству разделов, или больше. Добавление разделов документа Word актуально в том случае, если мы хотим оформить рамку для каждой страницы в индивидуальном стиле.
Возьмем такой пример: в документе 20 страниц и один раздел, которому они принадлежат, приложение Word позволяет применить заданную рамку ко всему разделу, к первой странице раздела или ко всем страницам кроме первой. Но, что если мы хотим, что бы каждая страница была оформлена индивидуальной рамкой (свет, стиль, толщина линии)? В таком случае, нам придется добавить 20 отдельных разделов в документ Word, и уже для каждого применить индивидуальное оформление.
Sections – разделы документа Word
Коллекция Sections содержит объекты Section для заданного документа, выделения или выбора. Отсюда следует, что мы можем получить доступ к данной коллекции тремя способами с помощью свойства Sections, которое есть у таких объектов:
Word Document – В данном случаем мы обрабатываем разделы для конкретного документа Word.
Word Selection – Тут мы можем получить те разделы документа Word, которое принадлежат заданному выделению.
Word Range – Тут мы можем получить те разделы документа Word, которое принадлежат заданному выбору.
Свойства
Count – Возвращает количество разделов (объектов Section) в коллекции.
First — Возвращает объект Section, представляющий первый элемент в коллекции Sections.
Last — Возвращает объект Section, представляющий последний элемент в коллекции Sections.
PageSetup — Возвращает объект PageSetup.
Методы
Add(Range, Start) — Возвращает объект Section, представляющий новый раздел, добавленный в документ Word. Оба параметра являются дополнительными.
Range — Диапазон перед которым нужно вставить раздел. Если этот аргумент опущен, раздел документа Word вставляется в конец.
Start — Тип раздела документа Word, который вы хотите добавить. Если параметр отсутствует, то раздел добавляется после следующей страницы. Значение константы WdSectionStart.
- wdSectionContinuous — 0 – Сплошной раздел.
- wdSectionEvenPage — 3 — Четные страницы.
- wdSectionNewColumn — 1 – Колонка.
- wdSectionNewPage — 2 — Страница.
- wdSectionOddPage — 4 — Нечетные страницы.
Item(index) – Доступ к заданному разделу по его номеру в коллекции.
Section – разделы документа Word
Свойства
Application — Возвращает объект Word Application.
Borders — Возвращает коллекцию Borders.
Footers и Headers — Свойства возвращают коллекцию HeadersFooters для нижнего или верхнего колонтитула.
Range — Возвращает объект Range.
PageSetup— Возвращает объект PageSetup.
Index — Возвращает позицию объекта Section в коллекции.
Теперь рассмотрим два программных кода на языке VBScript и JScript:
' ---------------------------------------------------------------------------- ' Коллекция Sections и объект Section ' Добавление разделов в документ Word ' Sections.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, i, MyText Set oWord = CreateObject("Word.Application") Set oDoc = oWord.Documents oDoc.Add() oWord.Visible = True Set oSel = oWord.Selection MyText = "Разделы документа Word. " For i=0 to 40 oSel.TypeText MyText & MyText & MyText & MyText & MyText & MyText & MyText oSel.TypeParagraph Next MsgBox "Количество разделов в документе Word - " & oDoc(1).Sections.Count oDoc(1).Sections.Add oDoc(1).Sections.Add oDoc(1).Sections.Add MsgBox "Количество разделов в документе Word - " & oDoc(1).Sections.Count
<
// ---------------------------------------------------------------------------- // Коллекция Sections и объект Section // Добавление разделов в документ Word // Sections.js // ---------------------------------------------------------------------------- var oWord, oDoc, oSel, i, MyText; oWord = WScript.CreateObject("Word.Application"); oDoc = oWord.Documents; oDoc.Add(); oWord.Visible = true oSel = oWord.Selection; MyText = "Разделы документа Word. "; for(i=0; i<=40; i++){ oSel.TypeText(MyText + MyText + MyText + MyText + MyText + MyText + MyText); oSel.TypeParagraph(); } WScript.Echo("Количество разделов в документе Word - " + oDoc(1).Sections.Count); oDoc(1).Sections.Add(); oDoc(1).Sections.Add(); oDoc(1).Sections.Add(); WScript.Echo("Количество разделов в документе Word - " + oDoc(1).Sections.Count);
В данных примерах все довольно просто. В самом начале мы создаем ссылку на объект Word Application, далее происходит создание нового документа и вставка в него заданного текста. Приложение Word автоматически создает один раздел для всего документа, плюс, данный раздел будет содержать в себе все страницы.
Далее в сценарии происходит вывод количества разделов документа Word, естественно, их значение равно 1. После, мы добавляем три новых раздела с помощью метода Add и снова выводим общее количество разделов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 |
Public Sub WorkWithSections() 'Разбивка документа на разделы 'В документе DocThree создаются разделы документа 'Вначале документ не имеет разделов Dim sect As Section Dim myr As Range 'Documents("Docthгее").Activate With ActiveDocument Debug.Print "В документе разделов - ", .Sections.Count 'Выделение последнего раздела .Sections(.Sections.Count).Range.Select Debug.Print "Абзацев в разделе - ", Selection.Paragraphs.Count Debug.Print "Предложений в разделе - ", Selection.Sentences.Count Debug.Print "Слов в разделе - ", Selection.Words.Count Debug.Print "Символов в разделе - "; Selection.Characters.Count 'Добавление разделов Set myr = .Paragraphs(11).Range myr.Select myr.InsertBreak wdSectionBreakNextPage Set myr = .Paragraphs(18).Range .Sections.Add myr, wdSectionEvenPage Set myr = .Paragraphs(29).Range .Sections.Add myr .Sections.Add 'Повторная печать после создания новых разделов Debug.Print "В документе разделов - ", .Sections.Count 'Выделение первого раздела Set sect = .Sections(1) Debug.Print "Абзацев в разделе - ", sect.Range.Paragraphs.Count Debug.Print "Предложений в разделе - ", sect.Range.Sentences.Count Debug.Print "Слов в разделе - ", sect.Range.Words.Count Debug.Print "Символов в разделе - ", sect.Range.Characters.Count End With End Sub Public Sub WorkWithSubDoc() ' Выделение поддокумента из главного документа 'Работа с поддокументами Dim DocPath As String Dim myr As Range ' 'Открываем и активизируем документ DocThree ' DocPath = Documents("DocOne").Path ' Documents.Open (DocPath & "Docthree") ' Documents("Docthrее").Activate With ActiveDocument Debug.Print "Число поддокументов =", .Subdocuments.Count If .Subdocuments.Count = 0 Then If .Sections.Count = 1 Then 'Выделение разделов WorkWithSections End If 'Выделение поддокумента, начиная с третьего раздела и до последнего Set myr = .Range(Start:=.Sections(3).Range.Start, _ End:=.Sections(.Sections.Count).Range.End) myr.Paragraphs(1).Style = wdStyleHeading1 .Subdocuments.AddFromRange myr Debug.Print "Теперь число поддокументов =", .Subdocuments.Count End If End With End Sub Public Sub SelectSubDoc() 'Еще один пример выделения поддокумента из главного документа Dim N As Integer Dim sect As Section Dim myr As Range With ActiveDocument Debug.Print "Число поддокументов =", .Subdocuments.Count For Each sect In .Sections Debug.Print sect.Range.Characters.Count Next 'Создание поддокумента из последнего раздела N = .Sections.Count 'Раздел должен иметь заголовок (выбрать из имеющихся стилей) .Sections(N).Range.Paragraphs(1).Style = wdStyleHeading1 .Subdocuments.AddFromRange Range:=.Sections(N).Range Debug.Print "Число поддокументов =", .Subdocuments.Count End With End Sub Public Sub ExampleTable() 'Создание таблиц в документе 'Documents("Doc.doc").Activate With ActiveDocument '.TablesOfContents.Add .Range(Start:=0, End:=0) 'Создание оглавления документа (д.б.заголовки) 'Создание обычной таблицы myTable в конце документа Dim myTable As Table Dim N As Integer Dim i As Integer, j As Integer .Paragraphs.Add N = .Paragraphs.Count Set myTable = .Tables.Add(Range:=.Paragraphs(N).Range, _ NumRows:=2, NumColumns:=3) 'Заполнение таблицы For i = 1 To myTable.Rows.Count For j = 1 To myTable.Columns.Count myTable.Cell(i, j).Range.InsertAfter i + j Next j Next i myTable.AutoFormat End With End Sub Public Sub WorkWithTablesOfFigures() 'Создание специальных таблиц в документе 'Работа с таблицами ссылок на иллюстрации документа Dim DocPath As String Dim myr As Range Dim ToF As TableOfFigures Dim capt As CaptionLabel 'Открываем и активизируем документ DocThree 'DocPath = Documents("DocOne").Path 'Documents.Open (DocPath & "DocThree") 'Documents("Docthree").Activate With ActiveDocument Set myr = Selection.Range myr.Select 'Создаем таблицы ссылок на графики и таблицы 'Оба заголовка должны быть элементами коллекции CaptionLabels .TablesOfFigures.Add Range:=myr, Caption:="Рисунок" .TablesOfFigures.Add Range:=myr, Caption:="Таблица" For Each ToF In .TablesOfFigures Debug.Print ToF.Caption Next ToF For Each capt In Application.CaptionLabels Debug.Print capt.Name Next capt End With End Sub Public Sub Picture() 'Создание и добавление картинок в документ 'Documents("Doc.doc").Activate With ActiveDocument Dim DocPath As String Dim N As Integer 'DocPath = .Path DocPath = "C:Temp" .Shapes.AddPicture FileName:=DocPath & "dog.bmp" .Paragraphs.Add N = .Paragraphs.Count .InlineShapes.AddPicture FileName:=DocPath & "cat.bmp", _ Range:=.Paragraphs(N).Range End With End Sub Public Sub AddTwoShapes() 'добавляются рисунки в коллекцию Shapes и InlineShapes Dim MyPath As String 'Documents("DocOne").Activate 'MyPath = ActiveDocument.Path MyPath = "C:Temp" 'Отключим вставку автозаголовока для рисунков ' Word.Application.AutoCaptions("Microsoft Word Picture").AutoInsert = False With ActiveDocument 'Рисунок добавляется а коллекцию Shapes .Shapes.AddPicture FileName:=MyPath & "cat.bmp" 'Рисунок добавляется в коллекцию InlineShapes 'привязывается к первому параграфу документа. .InlineShapes.AddPicture FileName:=MyPath & "mouse.bmp", Range:=.Paragraphs.First.Range End With End Sub Public Sub WorkWithLists() 'работа со списками 'Открываем документ DocTwo Dim MyPath As String Dim myRange As Range 'MyPath = Documents("DocOne").Path 'должен быть открыт 'Documents.Open MyPath & "DocTwo.doc" 'Documents("DocTwo").Activate With ActiveDocument Debug.Print "Списков в документе - ", .Lists.Count Debug.Print "Они занимают -", .ListParagraphs.Count, " абзацев" 'Создаем новый список Set myRange = .Range(Start:=.Paragraphs(3).Range.Start, _ End:=.Paragraphs(6).Range.End) myRange.ListFormat.ApplyBulletDefault Debug.Print "Теперь списков -", .Lists.Count Debug.Print "Они занимают - ", .ListParagraphs.Count, " абзацев" 'Повторное применение отменяет форматирование myRange.ListFormat.ApplyBulletDefault Debug.Print "Теперь списков -", .Lists.Count Debug.Print "Они занимают - ", .ListParagraphs.Count, " абзацев" End With End Sub Public Sub List() 'Работа со списками 'Documents("Doc.doc").Activate Dim NP As Integer, NL As Integer, NLP As Integer 'Сколько списков в документе? With ActiveDocument NP = .Sections(2).Range.Paragraphs.Count NL = .Lists.Count NLP = .ListParagraphs.Count Debug.Print "Списков, имеющих структуру, - ", NL Debug.Print "Списков абзацев -", NLP 'Преобразование 3-х последних абзацев в список-бюллетень Dim myRange As Range Set myRange = .Range(Start:=.Sections(2).Range.Paragraphs(NP - 3).Range.Start, End:=.Sections(2).Range.Paragraphs(NP).Range.End) Debug.Print "Списков, имеющих структуру,- ", .Lists.Count Debug.Print "Списков абзацев - ", .ListParagraphs.Count End With End Sub Public Sub WorkWithComments() 'работа с комментариями, сносками 'Открываем документ DocTwo Dim MyPath As String Dim myRange As Range Dim Fnote As Footnote, Enote As Endnote 'MyPath = Documents("DocOne").Path 'DocOne должен быть открыт 'Documents.Open MyPath & "DocTwo.doc" 'Documents("DocTwo").Activate With ActiveDocument Set myRange = .Sections(2).Range.Paragraphs(2).Range .Comments.Add myRange, "Программный проект этого документа" _ & vbCrLf & " содержит примеры главы 1" .Comments(1).Author = "Владимир " 'Показ комментария ActiveWindow.View.SplitSpecial = wdPaneComments .Comments.ShowBy = "Владимир " 'Передвигается объект Range и устанавливаются сноски: 'подстрочная и затекстовая myRange.Move Unit:=wdParagraph, Count:=1 .Footnotes.Add Range:=myRange, Text:="документ DocTwo используется для экспериментов." myRange.Move Unit:=wdParagraph, Count:=1 'нумерация конечных сносок с начала страницы .Endnotes.NumberingRule = wdRestartSection ' wdRestartPage .Endnotes.Add Range:=myRange, Text:="документ DocThree используется для экспериментов." 'Печать сносок For Each Fnote In .Footnotes Debug.Print Fnote.Range Next Fnote For Each Enote In .Endnotes Debug.Print Enote.Range Next Enote End With End Sub Public Sub AdditionalElements() 'Работа с комментариями, сносками, закладками и 'исправлениями Documents("Doc.doc").Activate With ActiveDocument Dim myRange As Range Set myRange = .Sections(2).Range.Paragraphs(2).Range .Comments.Add myRange, "Первый параграф носит ..." .Comments(1).Author = "Владимир" ActiveWindow.View.SplitSpecial = wdPaneComments .Comments.ShowBy = "Владимир" myRange.Move Unit:=wdParagraph, Count:=4 .Footnotes.Add Range:=myRange, Text:="Ссылки - это ..." myRange.Move Unit:=wdParagraph, Count:=-1 .Endnotes.Add Range:=myRange, Text:="Комментарий - это ..." .Bookmarks.Add Name:="Зaклaдкa1", Range:=myRange If .Bookmarks.Exists("Зaклaдкa1") Then .Bookmarks("Зaклaдкa1").Select Selection.Move Unit:=wdWord Debug.Print Selection.Text End If 'Включение режима исправлений и внесение исправлений .TrackRevisions = True Selection.InsertBefore "подстраничные " .Revisions.AcceptAll End With End Sub Public Sub RemoveBookmarks() 'Удаляет по запросу закладки активного документа Dim MyBM As Bookmark Dim Answer As String With ActiveDocument For Each MyBM In .Bookmarks Answer = InputBox(Prompt:="Удалить закладку? " & vbCrLf _ & "Имя закладки - " & MyBM.Name, _ Title:="Удаление закладок", Default:="Да") If Answer = "Да" Then MyBM.Delete Next MyBM End With End Sub |