大家好,我们今日继续讲解VBA代码解决方案的第146讲内容:如何实现Word文档的信息统计。熟悉Word的朋友都清楚,对于WORD文档的信息统计,是一个标准的功能,打开一个WORD文档,当选择一段文字后,在下面的信息栏中就会提示选中的字数、段落数等信息。那么这个功能是如何实现的的呢?我们利用VBA可否也可以实现类似的功能呢?今日的内容就当大家实现这个功能。当然,目的仍是让大家熟悉在WORD中如何利用循环语句。
说句实在话,对于一个OFFICE软件,无论是excel还是word,在微软提供的功能中如果想实现循环计算只有两个办法,一是利用数组,二是利用迭代运算。但这两种方法都有自己的局限性,比如迭代,要受到迭代次数的影响,不同的迭代次数运行的结果会有不同,而数组本身就是EXCEL的一个难点,说句夸张的话,在讲数组的文章中,或许你只有在我的这个平台可以能看到系统的讲解,如何的定义,如何的利用,在讲VBA之前我利用了大量的时间给大家讲EXCEL函数及各种高端的应用,如果感兴趣的朋友可以回过头来看看我之前的文章。如果我们理解了VBA这个知识点完全可以用VBA来解决,而且,解决的更好。
今日讲的实例是利用循环统计出所选文本中的句子数量和结尾的标点符号。
Sub mynzsen()
Dim s As Range, SenCount As Integer, MyString As String
Dim EndChar As String, K As Integer
K = 0
With Selection
If .Type = wdNoSelection Then Exit Sub
SenCount = .Sentences.Count '取得所选内容的句子数
For Each s In .Sentences '在句子中循环
K = K + 1
'如果句子中的最后一个字符为段落标记则EndChar为段落标记的前一个字符
If s.Characters(s.Characters.Count) = Chr(13) Then
EndChar = "[第" & K & "句结束标点为 " & s.Characters(s.Characters.Count - 1) & "]"
Else
EndChar = "[第" & K & "句结束标点为 " & s.Characters(s.Characters.Count) & "]"
End If
'以空格为分隔符,将结束标点在变量中累加
MyString = MyString & " " & EndChar
Next
End With
MsgBox "所选内容句子数:" & SenCount & vbCrLf & "结束标点分别为:" & MyString
End Sub
代码截图:
由于在程序中大部分我都做了注释,只是再简单的讲解一下:
上面的程序中需要注意的是对于有选择和没有选择的判断,这里是根据Selection.Type 的值来进行判断的,对于这个值可以有很多种类型,如下:
wdNoSelection 0 No selection.
wdSelectionBlock 6 A block selection.
wdSelectionColumn 4 A column selection.
wdSelectionFrame 3 A frame selection.
wdSelectionInlineShape 7 An inline shape selection.
wdSelectionIP 1 An inline paragraph selection.
wdSelectionNormal 2 A normal or user-defined selection.
wdSelectionRow 5 A row selection.
wdSelectionShape 8 A shape selection.
这里我用的是wdNoSelection也可以用wdSelectionIP,也可以表示没有任何的选中结果,对于这个词语的解释,后者wdSelectionIP的对应英文解释An inline paragraph selection。目前我还没有看到有那种翻译是较为合适的,好在我们的目的是应用,记住就可以了。
下面我们看程序的运行:
在上述的文档中选择了部分文字,运行结果:
今日内容回向:
1 WORD中的循环,你是否明白呢?
2 如何请计算出选择的句子数呢?
《VBA代码解决方案》终于可以和大家见面了,是我将一些非常实用的VBA内容结集成册,PDF文件,可以从中直接查找到你想要解决问题的思路和方法,可以复制文中的VBA代码直接使用。有需要的朋友微信联络我NZ9668。