2014-11-07 26 views
0

下面的宏應該拉每個句子的平均單詞,然後在所有句子中將文本變成紅色,所有句子中> = 150%。Word 2010 VBA每個句子對自己的單詞錯誤計數

問題是,它變成一些更短的句子紅色,以及。例如,它爲這些句子着色(編輯補充:在源文檔中,150%的平均長度是35個字):

31個字:FSAIPs爲評估監管實施的充分性提供了基礎基於此假定的操作過程進行設計,並支持準備預期劑量評估。

29的話:(按照10 CFR 835.2,等效劑量率標準適用於從輻射源30cm或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

我只是花了一些時間,試圖重現他的問題。確實,在Word GUI中,VBA字數與Word字數存在差異。大多數情況下,它添加一個字,但是一些情況下,它似乎有一些情況下它差不多5個。尚未找到一個解釋至今 – Matt 2014-11-07 03:29:45

回答

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 

您只需模擬'字數'對話框。

+0

我很抱歉,這三個星期枯萎了。客戶的優先考慮使我無法在這方面努力。 @Fratyx,我試着在'Next'之前添加'MsgBox Count',並且你的方法爲每個句子提供了一個準確的計數 - 儘管在文檔的開始和結尾,我得到了文件的總字數(和表非常緩慢)。在Sub的末尾有'MsgBox Count',我只能得到最後一句話的字數。這就像我需要平均所有的結果。如果沒有一個最簡單的方法去做,我只會碰到我原來的代碼中的乘法器,並且足夠接近。謝謝。 – TheFontSnob 2014-11-26 16:43:26

相關問題