【发布时间】:2017-12-19 16:15:45
【问题描述】:
有谁知道是否有 VBA 语句将连续的相邻字符识别为“单词”,而不是沿途计算每个非字母字符(作为单词)?
我的研究表明,大多数想要忽略标点符号和/或非字母字符的人都专注于修剪或取消选择字符。我想保留这些字符,但我也希望非字母字符忽略,而宏正在确定要选择多少个“单词”。
考虑以下“视觉”单词与“单词单词”的示例:
女士。史密斯-哈里斯(视觉 2;字 5) 上午 9:00(视觉上 2;字 7) 和/或(视觉上 1,字 3)
我有数百个宏,我可以通过文本扩展器轻松访问(使用助记快捷方式),其中有几十个宏可以选择并执行操作(例如,突出显示、粗体、大写、斜体、删除等)在我左边或右边的不同数量的文本上——这是我在转录和编辑工作中经常做的事情。
因此,例如,我的光标可能位于 Smith-Harris 女士的右侧,也许我想突出显示它或将其设为大写或删除它。我的眼睛可以更容易和更快地将字符串快速评估为 2 个“单词”(相邻文本),而不是停止并执行计算所有破坏性非字母字符的繁琐任务,Word 在何时将其视为“单词”选择文本,按照 Word 标准确定它是 5 个“单词”。
虽然文本扩展器本身能够直接从程序中执行我可能想要对文本执行的所有功能,但让它代替调用 Word 宏来执行该功能会更快、更有效,尤其是因为宏可以智能地从选择中修剪不需要的空格
但是,如果我在光标位于 Smith-Harris 女士右侧时运行,例如,Highlight2PreviousWords 宏(如下所示),它只会突出显示“-Harris”。
以下是我的“选择 X 个单词”宏的两个示例:
Sub h1lw_HighlightPrevious1Word()
Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
Dim oRng As Word.Range
Set oRng = Selection.Words(1)
Do While oRng.Characters.Last = " "
oRng.MoveEnd wdCharacter, -1
Loop
oRng.Select
Selection.Range.HighlightColorIndex = wdYellow
Selection.Collapse Direction:=wdCollapseEnd
End Sub
Sub h2lw_HighlightPrevious2Words()
'
Selection.MoveLeft Unit:=wdWord, Count:=2, Extend:=wdExtend
Dim oRng As Range
Set oRng = Selection.Range
Do While oRng.Characters.Last = " "
oRng.MoveEnd wdCharacter, -1
Loop
oRng.Select
Selection.Range.HighlightColorIndex = wdYellow
Selection.Collapse Direction:=wdCollapseEnd
End Sub
我所有的“选择一些词然后做某事”宏看起来都一样,当然除了“做某事”部分。所以所有的“选择左边的 1 个单词并做某事”宏看起来都像第一个,而所有的“选择左边的 2+ 个单词并做某事”看起来像第二个。我通常不会超过 5 个单词,因为在视觉上计算超过 5 个单词所需的时间,我可以手动选择文本。
因此,宏对于纯文本单词非常有用,但在混合使用其他字符时就不那么好了。我希望能够忽略非字母字符并将所有相邻文本的字符串定义为“单词”。
有谁知道实现这个的方法吗?
【问题讨论】: