【问题标题】:MSWord macro: search and highlight formatted text patternsMSWord 宏:搜索和突出显示格式化的文本模式
【发布时间】:2013-02-08 13:13:53
【问题描述】:

我正在尝试编写一个 MSWord 宏,该宏将在 MSWord 文件中查找并突出显示(黄色)某些类型的文本字符串。

例如:

1) 斜体逗号,后跟空格,然后是非斜体文本。因此,例如:

这句话中的 second 逗号,它是 italicized, 应该由所需的宏突出显示。 但是这句话中的逗号不要高亮,因为整个句子都是斜体的。



2) 一个粗体字符(任何种类,甚至是空格),前后都是非粗体字符。因此,例如:

这句话以粗体标点符号结尾第一个句号应突出显示。

我知道第一次月经可能看起来很正常,但事实并非如此。它很大胆。


3) SmallCaps 中的任何单词,长度大于 4 个字母,但不大写。我不知道如何在 markdown 中使用 smallcaps... 但请想象一下 MSWord 中的以下文本是 smallcaps:

想象一下,所有这些都在小型大写字母中。 . . “under”一词应突出显示,因为它的长度超过四个字符,但没有大写



有谁知道这是否可能?我知道使用正则表达式很容易找到文本模式,但是为这些模式添加格式更改似乎很棘手。

【问题讨论】:

  • blogs.technet.com/b/heyscriptingguy/archive/2006/07/14/… 如何在 Word 文档中搜索(并重新格式化)突出显示的文本。
  • 谢谢,但这似乎是在处理与查找突出显示的文本有关的稍微不同的场景。我的搜索模式有点复杂。
  • 再次感谢您的帮助。不过,我的问题是正则表达式似乎不允许包含格式的模式匹配。例如:据我所知,没有办法编写一个正则表达式来查找第一个字符为大写和粗体但其余部分为小写且非粗体的每个单词。
  • @MarcusChan,谢谢。我认为我的问题与您所链接的问题有点不同。我需要一种方法来识别由格式中的 change 标识的文本模式。因此,再举一个例子:我需要找到一种方法来突出一个斜体元音,然后是一个非斜体辅音。例如,This is an example。只有“is”和“ex”应该匹配。

标签: ms-word vba vbscript


【解决方案1】:

运行命令,

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-server Microsoft VBScript Regular Expressions 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

【讨论】:

  • 谢谢!但是我仍然无法将正则表达式与格式特征结合使用。我需要一种方法来选择并突出显示我在初始帖子中提供的前两个示例(斜体逗号,粗体句号)。对这怎么可能有任何想法?
  • 在 VBA 中添加 Microsoft VBScript 正则表达式 5.5。运行宏记录,编辑自动代码 Alt+F11。
  • 再次感谢您的帮助。我仍然不清楚单独的正则表达式是否可以解决我正在寻找涉及格式 changes 的模式的问题。请参阅我原始帖子中的示例 (1) 和 (2) 了解我的意思。
  • 正则表达式 - 仅查询文本。使用字体对象和搜索来更改和查找文本样式。
  • @nixda 我同意你的看法。只有一个问题。)我不懂英语))。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
相关资源
最近更新 更多