Подсчет слов в документе Word, включая сноски

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

У меня есть макрос, который правильно подсчитывает количество слов в теле текста, используя команду:

WordCount = ActiveDocument.Range(Start:=pos1, End:=pos2).ComputeStatistics(wdStatisticWords)

Переменные pos1 и pos2 установлены на первый и последний символы подсчитываемой страницы.

Однако, когда я добавляю параметр True в ComputeStatistics (wdStatisticWords, True), в IncludeFootnotesAndEndnotes, как в:

WordCount = ActiveDocument.Range(Start:=pos1, End:=pos2).ComputeStatistics(wdStatisticWords, True)

он не работает, выдает ошибку, что слишком много параметров. Похоже, что при использовании Range параметр IncludeFootnotesAndEndnotes недоступен.

Как вы подсчитываете количество слов в сносках, содержащихся в диапазоне?


person John    schedule 19.09.2016    source источник


Ответы (1)


Я думаю, что вам нужно будет выполнить итерацию по каждому из StoryRanges и обновить счетчик. Вот небольшой пример, который должен служить примером, однако вам, вероятно, потребуется настроить его для вашего конкретного случая (просмотрите мою заметку о перечислении для StoryRanges)

Вот код:

Public Sub Count_All_Words()
    Dim Story_Ranges         As Variant: Set Story_Ranges = ActiveDocument.StoryRanges
    Dim Story_Range          As Object
    Dim WordCount            As Long

    'Loop through each story range and only include the footer and Main story to the word count
    For Each Story_Range In Story_Ranges
        'You may need to check additional types, lookup the enumerations for StoryType here:
        'https://msdn.microsoft.com/en-us/library/bb238219(v=office.12).aspx
        If Story_Range.StoryType = wdMainTextStory Or Story_Range.StoryType = wdFootnoteSeparatorStory Then
            'Add to the word count
            WordCount = WordCount + Story_Range.ComputeStatistics(wdStatisticWords)
        End If
    Next

    Debug.Print "The word count is: " & WordCount
End Sub
person Ryan Wildry    schedule 19.09.2016