我正在尝试编写一个MSWord宏,它将找到,然后突出显示(黄色)MSWord文件中的某些类型的文本字符串。
例如:
1)斜体逗号,后跟空格,然后是非斜体文本。因此,例如:
此句中的第二个逗号,斜体,应该由所需的宏突出显示。 但是这句话中的逗号不应该突出显示,因为整个句子都是斜体。
2)粗体字符(任何类型,甚至是空格),前面和后面都是非粗体字符。因此,例如:
此句以粗体标点符号结尾。应突出显示第一个句点。
我知道第一个时期看起来很正常,但事实并非如此。这很大胆。
3)SmallCaps中的任何单词,长度> 4个字母,但不是大写。我不知道如何在markdown中做小型掌上电脑......但想象一下,以下文字在MSWord的小型掌握中:
想象一下这一切都在小型大写字母中。 。 。应该突出显示“在”之下的单词,因为它长于四个字符但不是大写
有谁知道这是否可能?我知道使用正则表达式查找文本模式非常容易,但在这些模式中添加格式更改似乎很棘手。
答案 0 :(得分:0)
运行cmd,
cscript //Nologo regexp02.vbs
regexp02.vbs:
Dim objRegExp : Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Global = True
Dim input
input="Imagine All of This Is in Small Caps. . . the Word under Should Be Highlighted Because It Is More Than Four Characters Long but is not Capitalized"
WScript.Echo input
WScript.Echo
Dim Pattern1 : Pattern1 = "\b[a-z]{5,}\s"
WScript.Echo "Pattern1 : " & Pattern1
WScript.Echo
objRegExp.Pattern = Pattern1
Set objMatches = objRegExp.Execute(input)
For i=0 To objMatches.Count-1
Set objMatch = objMatches.Item(i)
WScript.Echo objMatch.Value
Next
WScript.Echo
Dim Pattern2 : Pattern2 = "\b[A-Z]([a-z]{4,})\s"
WScript.Echo "Pattern2 : " & Pattern2
WScript.Echo
objRegExp.Pattern = Pattern2
Set objMatches = objRegExp.Execute(input)
For i=0 To objMatches.Count-1
Set objMatch = objMatches.Item(i)
WScript.Echo objMatch.Value
WScript.Echo Left(objMatch.Value, 1)
'TODO test bold sumbol Left(objMatch.Value, 1)
'
' TODO Highlight Code
'
Next
输出:
Imagine All of This Is in Small Caps. . . the Word under Should Be Highlighted Because It Is More Than Four Characters Long but is not Capitalized
Pattern1 : \b[a-z]{5,}\s
under
Pattern2 : \b[A-Z]([a-z]{4,})\s
Imagine
I
Small
S
Should
S
Highlighted
H
Because
B
Characters
C
VBA的正则表达式:
公开参考
选择COM服务器Microsoft VBScript正则表达式5.5
VBA代码:
Dim objRegExp As New VBScript_RegExp_55.RegExp
objRegExp.IgnoreCase = False
objRegExp.Global = True
objRegExp.Pattern = Pattern1
录制宏
按Ctrl + F,打开搜索对话框
选择字体属性
选择字体样式
按查找下一步
停止宏记录,打开VBA编辑器
编辑宏SearchItalic
运行宏SearchItalic
搜索斜体文字:
Sub SearchItalic()
Selection.Find.ClearFormatting
Selection.Find.Font.Italic = True
With Selection.Find
.Text = ""
.Forward = True
.Wrap = wdFindContinue
End With
Selection.Find.Execute
End Sub