最近在做word vba项目,遇到个需求,需要根据条件判断批量输出打√的方框和不打√的方框,类似如下图所示:
本来以为是个很容易的事情,没想到阻碍不小。
首先,我们先看看如何在word文档中手动输入带√的框。
对于在word中输入打√的方框,只要打开百度搜索一下,就可以找到一系列教程,教怎么在Word中输入打√的方框。
这里,小编推荐本人最喜欢的2种方法,也是最容易记住和操作的方法。
第一种,用搜狗拼音输入法,打一个√符号,然后在“开始”选项卡下的“字体”组中选择“带圈字符”,圈号选择“方框”。
第二种,输入一个大写的R,然后字体选择“Wingdings 2”即可。
在word中手动插入带√的方框,看上去就是这么简单,但是当你要把这个字符放到vba中去,会发现变样了。
通过带圈字符生成的打√的方框,复制到vba中被拆分成了方框和√两个字符。
通过字体显示的打√方框拷贝到vba中显示的是原来的字符R。
怎么办,怎么办?如何才能通过vba在word文档中输出打√的方框呢?
这里提供一种思路,仅供参考,如果您有更好的方法,请在评论区告诉我们。
回想刚才手动插入的过程,既然可以通过输入一个大写的R,然后字体选择“Wingdings 2”即可显示为打√的方框,我们为何不能在vba中先用大写的R代替该字符,然后输出在word中,再批量设置字体为“Wingdings 2”呢?
为此,我们将整个算法写成如下的形式:
将打√的方框表示为一个复杂的字符串(这个字符串不可能与整个word文档中的其它字符串重复,不能仅仅表示为大写字母R,因为有可能其它word字符串中也含有大写字母R),然后用word的查找替换,批量查找该复杂的字符串,替换为大写的R,同时替换设置字体格式为Wingdings 2。
代码如下:
Sub exceloffice()
Dim oDoc As Document
Set oDoc = Word.ActiveDocument
Dim oRng As Range
Set oRng = oDoc.Content
Arr = Array(“1、重大决策□”, “2、重要干部任免、奖惩□”, “3、重大项目安排□”, “4、大额资金使用□”, “5、其他□”)
‘条件是“重大决策”
sText = “重大决策”
For i = 0 To UBound(Arr)
If Arr(i) Like “*” & sText & “*” Then
‘将满足条件的项目的无√框替换为一个特殊的字符串,这里是8个美元符号组成的生僻词,在word文档中不可能出现这样的词”
Arr(i) = VBA.Replace(Arr(i), “□”, “$$$$$$$$”)
End If
Next i
With oRng
.Text = Join(Arr, vbTab)
With .Find
‘查找特殊的字符串
.ClearFormatting
.Text = “$$$$$$$$”
With .Replacement
.ClearFormatting
‘替换为大写字母R
.Text = “R”
‘要替换的格式
.Font.Name = “Wingdings 2”
End With
‘批量查找替换
.Execute Format:=True, Replace:=wdReplaceAll
End With
End With
End Sub
当然,除了上述方法,还可以用vba模拟第一种手动插入的方法,生成带圈的字符的方式,但是用上述代码可以非常完美的解决在word文档的任意位置插入打√的方框的问题,从而不用去考虑打√的方框在word文档中的位置,灵活性较好。
发表评论