Добавление закладки достаточно просто, если у вас уже есть объект диапазона.
ActiveDocument.Bookmarks.Add Name:=rngBookmark.Text, Range:=rngBookmark
Получение диапазона часто является сложной задачей.
Теперь вы сказали, что это заголовки разделов. Это настоящие заголовки разделов слов? Они ограничены определенным стилем? Они находятся в теле документа или в заголовках страниц?
Вы можете циклически перемещаться по разделам документа, подобным этому, и устанавливать диапазон для начала раздела.
Dim sectCurrent As Word.Section
Dim rngCurrent As Word.Range
For Each sectCurrent In ActiveDocument.Content.Sections
' get range that refers to the whole section
Set rngCurrent = sectCurrent.Range.Duplicate
' collapse the range to the start of the section
rngCurrent.Collapse wdCollapseStart
' expand the range to hold the first "word"
' you can also use other units here like wdLine
rngCurrent.MoveEnd Unit:=wdWord, Count:=1
' now that you have the range you can add the bookmark
' you can process the range and create your own name with a custom function GenerateBookmarkName. To get the string, just use rngCurrent.Text.
ActiveDocument.Bookmarks.Add Name:=GenerateBookmarkName(rngCurrent), Range:=rngCurrent
Next sectCurrent
Теперь, если они не являются реальными разделами, вам часто нужно использовать объект Find, чтобы найти что-то в документе и просмотреть все такие элементы. Хитрость в том, чтобы узнать, что искать. Пример цикла приведен ниже.
' setup range object for search results
Set rngFind = ActiveDocument.Content
' cycle through search results looking for whatever
With rngFind.Find
' search text
.Text = "FINDME"
.Format = False
.Wrap = wdFindStop
' loop while find is successfull
Do While .Execute
' get range you can modify based on found item
' each time you call .Execute rngFind is changed to the found text
Set rngModifyMe = rngFind.Duplicate
Loop
End With
Чтобы получить дополнительную помощь по слову vba, вы можете посетить сайт MVP здесь: http://word.mvps.org