分享

Word VBA技术:统计文档中每个字母字符的数量

 hercules028 2023-01-26 发布于四川
在某些情况下,可能想知道在文档中每个字母有多少个,即字母a-Z中每个有多少,或者可能想找出特定文本中最常用的字母。
本文包括两个VBA宏,计算Word文档中每个字母或其他字符的数量。
程序1:在对话框中显示结果,其中按指定的顺序显示每个字符的计数。
Sub FindNumberOfEachCharacterInActiveDocument_SortedAlphabetically() Dim strText As String Dim strTextNew As String Dim lngCount As Long Dim strInfo As String Dim strMsg As String Dim lngTotal As Long Dim strCharacters As String Dim strChar As String
'为便于编辑要计数的字符列表, '列表定义为字符串,strCharacters. '按你的需要编辑这个字符串 - 例如,添加要统计的数字. '不区分大小写.
  strCharacters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
strMsg = '' strText = UCase(ActiveDocument.Range.Text) lngTotal = Len(strText)
For lngCount = 1 To Len(strCharacters) '从strCharacters中获取字符      strChar = Mid(strCharacters, lngCount, 1)
'要获取出现的次数: '使用''代替strChar并计算不同的长度      strTextNew = Replace(UCase(strText), strChar, '')      strInfo = strChar & ':' & vbTab & lngTotal - Len(strTextNew) & vbCr '追加信息到消息框 strMsg = strMsg & strInfo Next lngCount
  '在对话框显示信息  strMsg = strMsg & vbCr & vbCr & _    '主文档中字母数量: ' & lngTotal '如果列表strCharacters没有按字母顺序排列, '你应该编辑下面的MsgBox标题 MsgBox strMsg, vbOKOnly, '按字母顺序统计'End Sub
程序2:在对话框中显示结果,其中按出现次数降序排列字符计数,即首先显示最常出现的字符。
Sub FindNumberOfEachCharacterInActiveDocument_SortedByOccurrences()  Dim strText As String  Dim strTextNew As String  Dim lngCount As Long  Dim strInfo As String  Dim strMsg As String  Dim lngTotal As Long  Dim lngChar As Long  Dim strCharacters As String  Dim strChar As String  Dim oDocTemp As Document  Dim oTable As Table
Application.ScreenUpdating = False
'为便于编辑要计数的字符列表, '列表定义为字符串,strCharacters. '按你的需要编辑这个字符串 - 例如,添加要统计的数字. '不区分大小写.
  strCharacters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
strMsg = '' strText = UCase(ActiveDocument.Range.Text) lngTotal = Len(strText)
'创建用于存储字符计数和执行排序的临时文档 '阻止自动新建宏运行(如果找到)  WordBasic.DisableAutoMacros 1 Set oDocTemp = Documents.Add
'插入用于为最终消息添加信息的表 With oDocTemp .Range.Text = ''     '插入2列表, 行数 = strCharacters的长度     Set oTable = .Tables.Add(.Range, Len(strCharacters), 2) End With
'添加strCharacters中每个字符的信息 For lngCount = 1 To Len(strCharacters) '从strCharacters获取字符      strChar = Mid(strCharacters, lngCount, 1)
'要获取出现的次数: '使用''代替strChar并计算不同的长度      strTextNew = Replace(UCase(strText), strChar, '') lngChar = lngTotal - Len(strTextNew) '在表中单元格2插入结果      oTable.Cell(lngCount, 2).Range.Text = lngChar '在表中单元格1插入字符      oTable.Cell(lngCount, 1).Range.Text = strChar   Next lngCount
'按列2排序表并转换成文本   oTable.Sort ExcludeHeader:=False, FieldNumber:='Column 2', _ SortFieldType:=wdSortFieldNumeric, SortOrder:=wdSortOrderDescending
   oTable.Rows.ConvertToText Separator:=wdSeparateByTabs '从oDocTemp存储文本, 准备在最终消息中使用 strInfo = oDocTemp.Range.Text
'不保存关闭oDocTemp oDocTemp.Close wdDoNotSaveChanges
Application.ScreenUpdating = True
'在对话框中显示信息    strMsg = strInfo & vbCr & vbCr & _     '主文档中字母数量: ' & lngTotal MsgBox strMsg, vbOKOnly, '按字符统计数值降序排列'
'清理    Set oDocTemp = Nothing Set oTable = Nothing
'再次启用自动运行宏 WordBasic.DisableAutoMacros 0End Sub
注意,这些程序只计算主文档中的内容,而不会统计页眉、页脚、尾注、脚注等中的字符。
你可以以这些代码为基础,统计其他字符的数量。例如,如果还想统计每个数字的数量,可以添加数字0-9
如何修改程序来仅统计所选内容中的字符
要统计文档中所选内容的字符,将代码中的:
strText = UCase(ActiveDocument.Range.Text)
修改为:
strText = UCase(Selection.Text)
在运行程序前,需要选择想要统计的文档内容。
使用VBA统计字符总数
代码为:
ActiveDocument.Characters.Count
注:本文学习整理自thedoctools.com,供学习参考。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多