Word VBA: Как исправить цикл FOR EACH, чтобы добавить закладку в каждое предложение? - PullRequest
0 голосов
/ 23 октября 2019

Внутри документа Word: я пытаюсь добавить закладку к каждому предложению. Например, в первом предложении будет закладка "bmarkpg01", а во втором предложении будет закладка "" bmarkpg01ln01col01 "". Мой код добавляет только одну закладку к первому предложению и не зацикливается на конце документа.

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

Sub tryAddBmarkatSentence()
Dim myRange As Range
Set myRange = ActiveDocument.Content
Dim bmark As Bookmark

Application.ScreenUpdating = False

For Each MySent In ActiveDocument.Sentences
    For Each bmark In ActiveDocument.Bookmarks
        ActiveDocument.Bookmarks.Add Name:="pmark" & bmark.Range.Information(wdActiveEndAdjustedPageNumber), Range:=myRange 'bmark name would have added info of page, line, and col number. here as example is pagenumber.

    Next
Next

End Sub

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ: В пределах всего документа каждое предложение имеет соответствующую закладку и имя закладки ("bmarkpg01ln01col01", "bmarkpg01ln02col10" и т. Д.)

АКТУАЛЬНЫЕ РЕЗУЛЬТАТЫ: только одна закладка являетсядобавлено к первому предложению документа.

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Следующее работает для меня, поскольку требования в вопросе идут.

Пожалуйста, не забудьте поставить Option Explicit вверху кодовой страницы. Это заставит вас объявлять («тусклые») переменные, но также сэкономит время и усилия, поскольку предотвратит опечатки и предупредит вас о других проблемах.

A Sentence в Word возвращает объект Range, поэтому код ниже деласер MySent As Range. Это обеспечивает цель Range для метода Bookmarks.Add.

Если вы не будете больше ничего делать с закладкой, Set bkm = при добавлении закладки не обязательно. Я оставил его, поскольку он объявлен в коде, указанном в вопросе.

Нет необходимости зацикливать коллекцию закладок - особенно потому, что их нет - они добавляются.

Я также добавил код для именования закладок.

Sub tryAddBmarkatSentence()
    Dim doc As Word.Document
    Dim MySent As Word.Range
    Dim bmark As Bookmark

    Application.ScreenUpdating = False
    Set doc = ActiveDocument

    For Each MySent In doc.Sentences
        Set bmark = doc.Bookmarks.Add(Name:="bmark" & _
        MySent.Information(wdActiveEndAdjustedPageNumber) & "_" &_
        MySent.Information(wdFirstCharacterLineNumber) & "_" & _
        MySent.Information(wdFirstCharacterColumnNumber), Range:=MySent)
        'bmark name would have added info of page, line, and col number. here as example is pagenumber.
    Next

End Sub
0 голосов
/ 23 октября 2019

ты можешь попробовать вот так

Sub tryAddBmarkatSentence()
Dim myRange As Range
Set myRange = ActiveDocument.Content
Dim bmark As Bookmark

Application.ScreenUpdating = False

For Each MySent In ActiveDocument.Sentences

        ActiveDocument.Bookmarks.Add ... and the rest of the code.
        //i dont know how you define witch bookmark is to asign to that sentence

Next

End Sub
...