Макрос ниже должен получить среднее количество слов в предложении, а затем сделать текст красным во всех предложениях, которые составляют> = 150% от этого.
Проблема в том, что некоторые более короткие предложения также окрашиваются в красный цвет. Например, он раскрасил эти предложения (отредактировано, чтобы добавить: в исходном документе 150% средней длины составляет 35 слов):
31 слово: FSAIP обеспечивают основу для оценки адекватности нормативной реализации проекта на основе этого предполагаемого рабочего процесса и поддерживают подготовку перспективных оценок дозы.
29 слов: (В соответствии с 10 CFR 835.2 критерии мощности эквивалентной дозы применимы на расстоянии 30 см от источника излучения или 30 см от любой поверхности, через которую проходит излучение.)
(Я бы привел еще примеры, но это процедура радиационного контроля на федеральном ядерном проекте, поэтому мне нужно тщательно выбирать.)
Количество слов в приведенных выше предложениях взято из строки состояния в нижней части окна. Таким образом, кажется, что Word подсчитывает количество слов по-разному в зависимости от того, какая часть Word подсчитывает. Я думаю.
Есть ли какие-либо предложения о том, как сделать подсчет более точным или, по крайней мере, одинаковым для обеих ситуаций? О, и последнее замечание: это не считая видимых удаленных слов. В некоторых случаях это может быть подсчет таких вещей, как неразрывные дефисы, но не в тех, которые были описаны выше.
Sub Mark_Long()
'''''''''''''''''''
' Adapted from "Allen Wyatt's Word Tips, wordribbon.tips.net.
' I added to it so it pulls the avg sentence length from
' the readability stats, and only marks the sentences that are 150%
' of the average.
''''''''''''''''''''
Dim iMyCount As Integer
Dim iWords As Integer
Dim bTrackingAsWas As Boolean
If Not ActiveDocument.Saved Then
ActiveDocument.Save
End If
Set myRange = ActiveDocument.Content
wordval = myRange.ReadabilityStatistics(6).Value
bTrackingAsWas = ActiveDocument.TrackRevisions
'Turn off tracked changes
ActiveDocument.TrackRevisions = False
'Reset counter
iMyCount = 0
'Set number of words
iWords = (wordval * 1.5)
For Each MySent In ActiveDocument.Sentences
If MySent.Words.Count > iWords Then
MySent.Font.Color = wdColorRed
iMyCount = iMyCount + 1
End If
Next
'Restore tracked changes
ActiveDocument.TrackRevisions = bTrackingAsWas
'Report results
MsgBox iMyCount & " sentences longer than " & _
iWords & " words."
End Sub