上一篇博客已经讨论了这个话题,示例代码可以处理包含Word表格中的文档。但是,Word文档的多样性,并不局限于此,例如有的用户习惯于使用文本框(TextBox),文档内容位于文本框中,使得上一篇博客的代码完全无效。
实例需求:Word文档如下图中左侧所示,现需要修改手工换行符和段落符之间文字的字体为蓝色,如右图所示,注意示例文档中有两个文本框,并且第二个文本框中包含表格。
- 在Word中使用【Shift+Enter】输入手工换行符,也称为软回车,其ASCII值为11,在文档中显示为向下的灰色箭头,如文档截图中第一行行尾所示
- 在Word中使用【Enter】输入段落符,也称为硬回车,其ASCII值为13,在文档中显示为转角向左的灰色箭头,如文档截图中第二行行尾所示
- 修改字体颜色时,应避免影响项目编号、项目符号的字体样式
示例代码如下。
Sub SearchInShape()
Dim shp As Shape, oChar As Range, bFlag As Boolean
Application.ScreenUpdating = False
For Each shp In ActiveDocument.Shapes
bFlag = False
For Each oChar In shp.TextFrame.TextRange.Characters
If Asc(oChar.Text) = 11 Then
bFlag = True
ElseIf Asc(oChar.Text) = 13 Then
bFlag = False
Else
If bFlag Then oChar.Font.Fill.ForeColor.RGB = VBA.RGB(0, 0, 255)
End If
Next
Next
Application.ScreenUpdating = True
End Sub
【代码解析】
第2行代码声明shp为Shape对象变量,oChar为Range对象变量,bFlag为Boolean类型变量。
第3行代码关闭屏幕更新,提升代码运行效率。
第4行代码遍历文档中的Shape对象。
第5行代码设置bFlag初始值为False。
第6行代码遍历当前形状文本框架中的每个字符Character。
第7行代码判断字符ASCII码是否为11(软回车)。
第8行代码如果字符ASCII码为11,设置bFlag为True。
第9行代码判断字符ASCII码是否为13(段落符)。
第10行代码如果字符ASCII码为13,设置bFlag为False。
如果bFlag为True,第12行代码则设置字符字体颜色为蓝色。
第16行代码恢复屏幕更新。