Scott正在寻找一种方法来获取文档中所有字符的“频率计数”。他想知道每个字符(ASCII代码9到255)出现了多少次。可以使用“查找并替换”来确定单个字符的数量(只需搜索有问题的字符,然后将其替换为自己),但是这种方法充其量是乏味的,如果您需要在247进行一次,则最好。不同的字符代码以获得所需的信息。

必须使用宏来完成这样的任务,但是有几种方法可以实现它。一种方法是编写一个宏,该宏将遍历Characters集合的每个成员,检查每个宏,并将该字符分配给多个计数器之一。

Sub CountChars1()

Dim iCount(0 To 255) As Integer     Dim i As Integer     Dim vCharacter As Variant     Dim sTemp As String

' Initialize the array     For i = 0 To 255         iCount(i) = 0     Next i

' Fill the array     For Each oCharacter In ActiveDocument.Characters        i = Asc(oCharacter)

iCount(i) = iCount(i) + 1     Next

' Add document for results     Documents.Add     Selection.TypeText Text:="ASCII Character Count" & vbCrLf

' Only output codes 9 through 255     For i = 9 To 255         sTemp = Chr(i)

If i < 32 Then sTemp = Trim(Str(i))

sTemp = sTemp & Chr(9) & Trim(Str(iCount(i)))

sTemp = sTemp & vbCrLf         Selection.TypeText Text:=sTemp     Next i End Sub

宏使用iCount数组累加每个字符代码的计数,然后创建一个新文档以输出结果。 (结果文档可以采用任何所需的格式。)

对于相对短的文档(最多几页),此方法可以很好地工作。当文档变长时,宏变慢。为什么?

因为某种原因,使用Characters集合会花费大量时间。如果宏对于您的文档运行太慢,那么您将需要对其进行一些更改,使其仅与字符串一起使用。

Sub CountChars2()

Dim iCount(0 To 255) As Long     Dim i As Long     Dim j as integer     Dim lCharCount As Long     Dim sDoc As String     Dim sTemp As String

' Initialize the array     For i = 0 To 255         iCount(i) = 0     Next i

' Assign document to a huge string     lCharCount = ActiveDocument.Characters.Count     sDoc = ActiveDocument.Range(0, lCharCount)



' Fill the array     For i = 1 to Len(sDoc)

j = Asc(Mid(sDoc, i, 1))

iCount(j) = iCount(j) + 1     Next

' Add document for results     Documents.Add     Selection.TypeText Text:="ASCII Character Count" & vbCrLf

' Only output codes 9 through 255     For i = 9 To 255         sTemp = Chr(i)

If i < 32 Then sTemp = Trim(Str(i))

sTemp = sTemp & Chr(9) & Trim(Str(iCount(i)))

sTemp = sTemp & vbCrLf         Selection.TypeText Text:=sTemp     Next i End Sub

请注意,此版本的宏将整个文档填充为单个字符串sDoc。然后宏可以非常快速地处理此字符串。 (在我的系统上处理一个635页的文档只花费了大约30秒的时间。)由于此版本适用于更长的文档,因此请注意,某些变量类型已更改,以反映更多计数的可能性。

注意:

如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)中描述的宏,我准备了一个包含有用信息的特殊页面。

_WordTips_是您进行经济有效的Microsoft Word培训的来源。

(Microsoft Word是世界上最流行的文字处理软件。)此技巧(112)适用于Microsoft Word 2007、2010、2013和2016。您可以在此处找到适用于Word的较早菜单界面的该技巧的版本: