是否有人知道是否有VBA语句将连续的相邻字符识别为"字"而不是沿途计算每个非字母字符(作为一个单词)?
我的研究表明,大多数想要忽略标点符号和/或非字母字符的人都专注于修剪或取消选择字符。我想保留这些字符,但我也希望非字母字符忽略,而宏确定了多少"字"选择。
考虑以下" visual"单词与"单词":
女士。 Smith-Harris(视觉2; Word 5) 上午9点(视觉上2;字7) 和/或(视觉上1,Word 3)
我有数百个宏,我可以通过文本扩展器轻松访问(使用助记符快捷键),其中有数十个宏将选择并执行操作(例如,高亮,粗体,大写,斜体,删除等)在我左边或右边的不同数量的文本 - 我在转录和编辑工作中经常做的事情。
因此,例如,我的光标可能位于Smith-Harris女士的右边,也许我想要突出显示它或将其设为大写或删除它。我的眼睛更容易,更快速地快速评估这一串字符为2"字" (相邻文本)而不是停止并执行繁琐的任务,即计算Word所计算的所有破坏性非字母字符"单词"在选择文本时,要弄清楚它的5"单词"按照Word标准。
尽管文本扩展器本身能够直接从程序中执行我可能想要对文本执行的所有功能,但是让它更快更有效地调用Word宏来执行功能,特别是因为宏可以智能地从选择中删除不需要的空格
但是,如果我运行Highlight2PreviousWords宏(如下所示),而我的光标位于Smith-Harris女士的右边,那么它只会突出显示&#34; -Harris。&#34; < / p>
以下是我的&#34;选择X个单词的两个例子&#34;宏:
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
我的所有&#34;选择一些单词,然后做一些事情&#34;宏观看起来是一样的,除了&#34;做某事&#34;部分当然。所以所有的&#34;选择左边的1个单词并做一些事情&#34;宏看起来像第一个,并且所有&#34;选择左边的2个单词并做一些事情&#34;看起来像第二个。我通常不会超过5个单词,因为在视觉上超过它的时间,我可以手动选择文本。
因此,宏可以很好地用于直文单词,但是当其他字符混合使用时效果不是很好。我希望能够忽略非字母字符,并将相邻文本的所有字符串定义为&#34;单词。&#34;
有谁知道如何实现这个目标?
答案 0 :(得分:1)
首先提出两个提示:
real
信息,您可以使用Range.ComputeStatistics() method
ActiveDocument.Range(startingPosition, EndingPosition)
这是你改进的第一个子程序。它可能不是你需要的100%,但我相信这是一个很好的起点(使用 Smith-Harris女士 :)测试。)
Sub h1lw_HighlightPrevious1Word()
Dim curSection As Range
Dim curEnd As Long
curEnd = Selection.End
Dim newStart As Long
Do
newStart = Selection.Start
Selection.MoveLeft Unit:=WdUnits.wdWord, _
Count:=1
Set curSection = ActiveDocument.Range(Selection.Start, curEnd)
Debug.Print curSection.Text 'test
Loop While curSection.ComputeStatistics(wdStatisticWords) < 2
Set curSection = ActiveDocument.Range(newStart, curEnd)
Debug.Print curSection.Text 'test
'removing ending spaces
Do While curSection.Characters.Last = " "
Set curSection = ActiveDocument.Range(curSection.Start, curSection.End - 1)
Loop
With curSection
.HighlightColorIndex = wdYellow
ActiveDocument.Range(.End, .End).Select
End With
End Sub
聚苯乙烯。我相信有一个较短的解决方案,但我无法弄清楚。我认为可以在这里使用RegEx作为替代方案。