首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WORD VBA统计单词出现次数

WORD VBA统计单词出现次数
EN

Stack Overflow用户
提问于 2011-04-13 15:21:54
回答 1查看 8K关注 0票数 0

我有一个下面的代码,它已经在工作。然而,我需要进一步简化代码。下面的代码对文档中出现的单词进行计数。代码如下:

代码语言:javascript
复制
Option Base 1

Sub arrangepara()
Dim r As Range

Set r = activedocument.Range
If (r.Characters.Last.text = vbCr) Then r.End = r.End - 1
sortpara r
End Sub

Function sortpara(r As Range)
Dim sWrd As String
Dim Found As Boolean
Dim N As Integer, i As Integer, j As Integer, k As Integer, WordNum As Integer
N = r.Words.count
ReDim Freq(N) As Integer
ReDim Words(N) As String
Dim temp As String

i = 1
WordNum = 0
Do While r.Find.Execute(findtext:="<*>", MatchWildcards:=True, Wrap:=wdFindStop) = True
   If i = N Then Exit Do
        Found = False
        For j = 1 To WordNum
               If Words(j) = r.text Then
                   Freq(j) = Freq(j) + 1
                   Found = True
                   Exit For
               End If
        Next j
        If Not Found Then
            WordNum = WordNum + 1
            Words(WordNum) = r.text
            Freq(WordNum) = 1
        End If
   i = i + 1
Loop

Set r = activedocument.Range
r.Collapse wdCollapseEnd
r.InsertParagraphBefore
r.Collapse wdCollapseEnd

r.InsertAfter "Occurrence List:"
r.Collapse wdCollapseEnd
r.InsertParagraphBefore
r.Collapse wdCollapseEnd


For j = 1 To WordNum
    r.InsertAfter Words(j) & " (" & Freq(j) & ")" & vbCr
Next j

r.Select
Selection.sort SortFieldType:=wdSortFieldAlphanumeric, SortOrder:=wdSortOrderAscending
r.Font.Color = wdColorAqua

End Function

我需要简单的这一部分,我不知道如何。有没有什么好心人可以帮我简化代码呢?非常感谢!以下是我需要简化的内容:

代码语言:javascript
复制
Do While r.Find.Execute(findtext:="<*>", MatchWildcards:=True, Wrap:=wdFindStop) = True
   If i = N Then Exit Do
        Found = False
        For j = 1 To WordNum
               If Words(j) = r.text Then
                   Freq(j) = Freq(j) + 1
                   Found = True
                   Exit For
               End If
        Next j
        If Not Found Then
            WordNum = WordNum + 1
            Words(WordNum) = r.text
            Freq(WordNum) = 1
        End If
   i = i + 1
Loop
EN

回答 1

Stack Overflow用户

发布于 2011-05-06 02:00:49

我假设“简化”的意思是“提高性能”,因为我怀疑这将是一个可怕的缓慢。

我会避免使用Find来获取所有的单词。而不是:

代码语言:javascript
复制
Do While r.Find.Execute(findtext:="<*>", MatchWildcards:=True, Wrap:=wdFindStop) = True
   ...
Loop

我认为你应该使用:

代码语言:javascript
复制
Dim w as Word
For each w In ActiveDocument.Words
   ...
Next
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5645762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档