2013-03-16 68 views
2

我有一個單詞宏,用於統計文檔中突出顯示或未加下劃線粗體的所有文本。宏工作正常 - 雖然計數略高於「查找」功能在某些文檔上返回的結果(如果有人知道爲什麼我會很高興地發現它)。通過格式化宏有效字數

宏的問題在於,它的效率非常低,並且在長度大約爲50頁的文檔上運行時滯留在計算機上的時間並不是很多。有沒有人看到更有效的方式來編寫類似功能的宏?

Dim highlightCount 
    Dim boldCount 
    Dim wordTotal 
    boldCount = 0 
    highlightCount = 0 

    For Each w In ActiveDocument.Words 
     If w.HighlightColorIndex <> wdNoHighlight Then 
      highlightCount = highlightCount + 1 
     End If 
     If w.Font.Bold = True Then 
      If w.HighlightColorIndex = wdNoHighlight Then 
       If w.Font.Underline = False Then 
        boldCount = boldCount + 1 
       End If 
      End If 
     End If 
    Next 
    wordTotal = highlightCount + boldCount 
    MsgBox ("There are " & wordTotal & " words to be spread") 
End Sub 

回答

2

我無法回答您關於計數器結果太高的問題,因爲我在代碼中看不到問題。但我可以提出另一種解決方案,我使用Find對象,我猜這會比你的想法快得多。唯一的問題是,對於你定義的兩種類型的單詞條件,你必須單獨運行兩次「搜索」(下面兩個循環)。

Sub CountWords() 

Dim rngWords As Range 
Set rngWords = ActiveDocument.Content 
Dim boldCount As Long, highlightCount As Long 
Dim wordTotal As Long 

Do 
With rngWords.Find 
    .Highlight = True 
    .Forward = True 
    .Execute 
End With 
If rngWords.Find.Found = True Then 
    highlightCount = highlightCount + rngWords.Words.Count 
Else 
    Exit Do 
End If 
Loop 

Set rngWords = ActiveDocument.Content 

Do 
With rngWords.Find 
    .Font.Bold = True 
    .Highlight = False 
    .Font.Underline = wdUnderlineNone 
    .Forward = True 
    .Execute 
End With 
If rngWords.Find.Found = True Then 
    boldCount = boldCount + rngWords.Words.Count 
Else 
    Exit Do 
End If 
Loop 

wordTotal = boldCount + highlightCount 
MsgBox "There are " & wordTotal & " words to be spread" 
End Sub 

如果因爲我沒有50頁文件進行測試,速度會更快,請問您能否給我們提供一些線索。

+0

這運行速度快得多,但它不會返回正確的結果。它計算突出顯示的文本的部分數量,而不是突出顯示的文字的數量。因此,如果突出顯示「我的名字是賬單」這個短語,那麼將這四個單詞作爲一個例子。感謝您的快速回復 - 我會再次考慮再次使用Find,因爲它效率更高。 – pavja2 2013-03-16 13:58:47

+0

我做了一個快速編輯,似乎工作 - 它仍然關閉幾百個單詞,但它似乎在計算一些東西,並且不到1/4的時間運行。非常感謝幫忙。 'boldCount = boldCount + rngWords.Words.Count' – pavja2 2013-03-16 14:04:59

+0

是的,您的建議很好,我將它添加到上面的代碼中。你加了兩次嗎?對於'highlightCount'和'boldCound' ... – 2013-03-16 14:32:02