一、自定义样式无法分别设置英文和中文字体格式
虽然Microsoft Office有自定义样式的选择,但是暂且做不到分别设置英文和中文字体颜色,以及分别设置底纹颜色。英文和中文的字体颜色是共用的。所以需要编写宏代码,通过正则表达式来分别设置英文和中文的字体格式。
比如说,我想要设置中文:黑色5号宋体;英文:深红色RGB(192,0,0),5号数学体Cambria Math,底纹为淡灰色RGB(237,237,237)。如下图:
但是Microsoft Office的“自定义样式”,只能设置成如下样式。
即便我们进入“格式→字体”进行调整,中英文字体的颜色只能共用一种颜色。“格式→边框→底纹”,底纹也只能共用。
因此我们需要编写宏代码,通过正则表达式来分别设置英文和中文的字体格式。
二、编写分别设置英文和中文字体格式的宏代码
1、进入Word,点击“文件→选项→高级”,取消勾选“中文字体也应用于西文”,点击确定。
2、点击“视图→宏→查看宏”。
① 如果还没有创建过自定义的宏代码,点击创建。
② 如果创建过自定义的宏代码,选择其中一个宏代码,点击编辑。
3、进入VBA界面,点击“插入→过程”,输入子程序名称:Red_Western_Font_Theme,选择公共的。
4、输入以下宏代码
'自定义:中文:5号黑色宋体; 英文+数字+特殊字符:5号红色数字体+底纹灰色
Public Sub Red_Western_Font_Theme()
'选中文本变量
Dim rng As Range
Set rng = Selection.Range
'选中文本先全部清除格式,然后设置为宋体,接着设置为数字体,(只有西文会变数字体),字号5号,黑色字体
Selection.ClearFormatting
With rng.Font
.Name = "Simsun" '默认整体宋体,此处使用宋体的英文名称,避免中文乱码
.Name = "Cambria Math" '西文数学体
.Size = 10.5 '五号字体
.Color = RGB(0, 0, 0) '黑色字体
.Bold = False '加粗 无
.Italic = False '斜体 无
.Underline = wdUnderlineNone '下划线 无
.UnderlineColor = wdColorBlack '下划线 黑色
.EmphasisMark = wdEmphasisMarkNone '着重号 无
.StrikeThrough = False '删除线 无
.DoubleStrikeThrough = False '双删除线 无
.Superscript = False '字体格式 上标 无
.Subscript = False '字体格式 下标 无
.SmallCaps = False '小型大写字母 字母的形状和大写字母相同但尺寸较小
.AllCaps = False '全部大写字母 如果为true 字母全部大写
.Hidden = False '隐藏 如果设置为true,打印的时候看不到
End With
'创建VBA的正则表达式对象
Dim reg As Object
Set reg = CreateObject("VBScript.Regexp")
'正则表达式匹配
'[]意为包含
'\w :可以匹配字母、下划线和数字,相当于[a-zA-Z0-9_]
'一些特殊字符,自行添加即可
With reg
.Global = True
.Pattern = "[\w\.\@\%\-\+\\\/\#\^\~\=]"
End With
'遍历选中文本数组中的每一个字符
Dim i As Integer
For i = 1 To rng.Words.Count
If reg.Test(rng.Words(i)) Then '通过reg.Test(String str)匹配字符是否满足正则表达式
With rng.Words(i) '对满足条件的字符设置Font Style
.Font.Color = RGB(192, 0, 0) '深红色
.Shading.Texture = wdTextureNone '以下三个Shading是设置底纹颜色为淡灰色的
.Shading.ForegroundPatternColor = wdColorAutomatic
.Shading.BackgroundPatternColor = RGB(242, 242, 242)
End With
End If
Next i
End Sub
如果你在设定过程中不喜欢英文、数字、下划线以及特殊字符是RGB(192,0,0)的红色颜色,你可以设定为其它颜色。不喜欢灰色底纹的,也可以把三个Shading删除。
三、给宏代码自定义功能区
1、菜单栏空白处右键,点击“自定义功能区”
2、点击自定义功能区,接着下拉左侧命令选项,选择“宏”。
3、左侧选择刚刚创建的Red_Western_Font_Theme()宏代码,右侧选择“开始”
4、在“开始”处新建组,重命名为“特殊字体样式”
5、左侧选择刚刚创建的Red_Western_Font_Theme()宏代码,右侧选择“特殊字体样式”,点击添加,接着重命名为:英文标红+灰色底纹,选择一张符号。点击确定。
6、在 “开始” 选项栏的 “样式” 旁边出现了我们建立的 “特殊字体样式” 了。
7、选中下面的文本,已知该文本格式全为:等线5号加粗黑色字体。点击上面的,字体变成了我们想要的样式。


四、注意
前面的代码提到 "宋体"采用其英文名称"Simsun",是有一定原因的。
假如我们在Windows部署了Git、PowerShell、CMD。
Git 使用的是utf-8编码,PowerShell、CMD使用的是GBK编码,VBA使用的是非Unicode编码。
当在 “管理语言设置”→“更改系统区域设置” 处,勾选了:Beta版:使用Unicode UTF-8提供全球语言支持(U),可以使得 Git、PowerShell、CMD 不出现中文乱码,但是VBA里面涉及到中文的代码则会标识为乱码,比如:
Dim rng As Range
Set rng = Selection.Range
With rng.Font
.Name = "宋体"
"宋体"实际上会识别为"????"的乱码,导致无法使用。
Dim rng As Range
Set rng = Selection.Range
With rng.Font
.Name = "????"
因此,当系统使用 Beta版:使用Unicode UTF-8提供全球语言支持(U)时,VBA应该避免使用到中文,"宋体" 改成其英文标记"Simsun"
Dim rng As Range
Set rng = Selection.Range
With rng.Font
.Name = "Simsun"