使用 selection.previous wdword,1 错误在 VBA 中获取上一个单词



>我正在尝试编写一个宏以在光标处键入上一个单词。问题是当我使用"selection.Previous wdword, 1"来获取前一个字符时,它有时会获取前 2 个字符,这似乎是一个错误。当我按下"删除"按钮时,它可以工作,这对我来说很奇怪。如果你帮忙,我会很高兴的。我的最终目标是使用此代码在 Word 中创建一个日历转换器。以下是我测试它的方式:

MsgBox Selection.previous(unit:=wdWord, Count:=1)

使用下一个是相同的:

MsgBox Selection.Next(unit:=wdWord, Count:=1)

有时它会返回单词 after!

例如,这是文本:在 21/3/1389 的飞行期间

如果光标紧跟在 1389 之后,msgbox selection.previous(1,1) 将显示 "/";如果光标在 1389 之后的空格之后,则显示 "1389"。我认为,问题在于空间。我的问题是是否有任何替代方法可以阅读上一个单词而不是此命令(Selection.previous(unit:=wdWord,Count:=1))

Word 没有问题 - 它的行为符合设计。有些东西必须告诉 Word 单词的开始和结束位置。当光标位于空格的右侧时,它(非常合乎逻辑地)位于下一个单词的开头。所以回溯一个词会得到 1389 而不是/。

您可以在代码中解决此问题。我确定有多种方法可以做到这一点,但是在快速测试中,以下内容对我有用:

Sub GetPrevWord()
  Dim rngSel As word.Range, rngPrev As word.Range
  Set rngSel = Selection.Range
  Set rngPrev = rngSel.Duplicate
  rngPrev.MoveStart wdCharacter, -1
  If Left(rngPrev.Text, 1) = " " Then
    rngPrev.Collapse wdCollapseStart
  End If
  rngPrev.Select
  MsgBox Selection.Previous(unit:=wdWord, Count:=1)
  rngSel.Select
End Sub

它所做的是使用两个范围:一个用于保存原始选择,另一个用于处理 (rngPrev )。 rngPrev向后扩展一个字符,并计算此字符。如果它是一个空格,则rngPrev折叠到其起点。(可以将其视为按所选内容的左箭头键。在任何情况下,都会选择rngPrev并运行MsgBox代码。最后,再次选择原始范围。

最新更新