>我正在尝试编写一个宏以在光标处键入上一个单词。问题是当我使用"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
代码。最后,再次选择原始范围。