Sections in word vba

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 Long

     RangeStart = ActiveDocument.Sections(1).Range.Start
     RangeEnd = ActiveDocument.Sections(2).Range.End

        
     Set r = ActiveDocument.Range(RangeStart, RangeEnd)

     r.Select

     
     ActiveDocument.PrintOut Range:=wdPrintSelection

     
    End Sub

    My 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) – Доступ к заданному разделу по его номеру в коллекции.

Добавление новых разделов Word

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

Like this post? Please share to your friends:
  • Sections in word page numbers
  • Search for any text in excel
  • Searching for keywords in word documents
  • Sectioning pages in word
  • Search for any number in word