从某个范围返回特定单词的索引

时间:2016-03-03 18:52:51

标签: vba ms-word word-vba

我有一个范围(rng),其中包含“手段”一词。我试图确定“手段”之前的两个单词是否加下划线,但不能弄清楚如何。

这是我rng.Text的内容(注意括号表示带下划线的文字)

"[Automobile] - means a car that isn't a bus but can be an SUV"

有时,它是"The way you have to go about it is with the various means of thinking"

第一个是定义,因为它的“装置”前面带有带下划线的单词。第二个例子不是定义。

我试图让我的宏在“意味着”之前看两个单词,但是不能弄清楚如何。

我可以通过这个来计算它有多少个字符:

Dim meansLoc&
meansLoc = instr(rng.Text, "means")

然后,我可以测试If rng.Characters(meansLoc-9).Font.Underline = wdUnderlineSingle,但是如果我定义的单词只说3个字符(“爸爸 - 意味着父亲”),我会遇到问题,因为这意味着'索引是7和7 -9 = -2)。这就是我想用词的原因。 (我可以在“手段”之前使用一两个词。)

如何在rng中返回“手段”的字符索引。如何从我的rng获得“单词索引”(即2)?

1 个答案:

答案 0 :(得分:1)

字符和单词都是范围,因此一种方法是将字符的开头范围与rng中的每个字词进行比较,例如:你可以从

开始
' assumes you have already declared and populated rng

Dim bDefinition As Boolean
Dim i as Integer
Dim meansLoc as Integer
Dim meansStart as Integer
meansLoc = instr(rng.Text,"means")
meansStart = rng.Characters(meansLoc).Start
bDefinition = False
For i = 1 To rng.Words.Count
  If rng.Words(i).Start = meansStart Then ' i is your Word index (i.e. 3, not 2!)
    If i > 2 Then
      If rng.Words(i - 2).Font.Underline = wdUnderlineSingle Then
        Debug.Print "Looks like a definition"
        bDefinition = True
        Exit For
      End If
    End If
  End If
Next
If Not bDefinition Then
  Debug.Print "Couldn't see a definition"
End If

请记住Word认为是" word"可能与你正常理解什么是" word"是