下面的宏应该拉出每个句子的平均单词,然后在所有<> = 150%的句子中将文本变为红色。
问题是,它将一些更短的句子变为红色。例如,它为这些句子着色(编辑添加:在源文档中,150%的平均长度为35个单词):
31个字:FSAIPs为基于该假设的操作过程评估设计的监管实施的充分性提供了基础,并支持准备预期的剂量评估。
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
答案 0 :(得分:0)
属性.Words
返回真实的单词,还有标点符号和段落标记。要获得真实的字数,你可以使用这个 - 有点奇怪 - 方法。
Set dlg = Dialogs(wdDialogToolsWordCount)
For Each MySent In ActiveDocument.Sentences
MySent.Select
Set dlg = Dialogs(wdDialogToolsWordCount)
dlg.Execute
Count = dlg.Words
' Count is the number you are looking for
Next
您只需模拟“字数”即可。对话框。
答案 1 :(得分:0)
你应该使用.Range.ComputeStatistics(wdStatisticWords)而不是.Words.Count。 第一个返回过滤后的值,第二个返回未过滤的值
请参阅: http://www.vbaexpress.com/forum/archive/index.php/t-21723.html