用户格式和循环使用Word范围

时间:2016-02-29 20:20:06

标签: vba ms-word

我有一个我正在使用的用户表单,允许用户输入数字。我将使用这个数字来扩展那么多段的选择。

这个想法是,我有一个包含数百个定义的文档。这些以“[word] - 表示[等]”开头,因此我可以查找“手段”,选择它所在的段落,然后询问用户是否要将此段落添加到索引中。

有时,定义分为两段。我希望用户能够输入“2”,并选择两个段落。

我的表单正常工作,除了我坚持如何循环这个。我对Word VBA不是很熟悉(但是我在使用Excel),所以我不确定我哪里出错了。

焦点是Case 0块,请参阅我的评论。这是我想通过X段扩展选择的地方。

Sub find_Definitions()
Dim defText As String, findText$
Dim oRng    As Word.Range, rng As Word.Range
Dim myForm As frmAddDefinition
Set myForm = New frmAddDefinition

Dim addDefinition$, expandParagraph&
expandParagraph = 1

Set oRng = ActiveDocument.Range
findText = InputBox("What text would you like to search for?")

With oRng.Find
    .Text = findText
    While .Execute
Start_Find:
    Set rng = oRng.Paragraphs(1).Range
        rng.Select
        defText = oRng.Paragraphs(1).Range
        myForm.Show
        Select Case myForm.Tag
            Case 0 ' Expand the paragraph selection
                expandParagraph = InputBox("How many paragraphs to extend selection?")
                rng.MoveEnd unit:=wdParagraph, Count:=expandParagraph
                rng.Select
                defText = rng
                ' Here I want to ask if this is okay, or to expand again
                ' ?????

                ActiveDocument.Indexes.MarkEntry Range:=rng, entry:=defText, entryautotext:=defText
            Case 1 ' No, do not add to the index
                ' do nothing
            Case 2 ' Yes, add to index
                ActiveDocument.Indexes.MarkEntry Range:=rng, entry:=defText, entryautotext:=defText
            Case 3 ' Cancel, exit the sub
                MsgBox ("Exiting macro")
                GoTo lbl_Exit
        End Select
    Wend
End With

lbl_Exit:
Unload myForm
Set myForm = Nothing
End Sub

编辑:使用上面的代码,它将选择突出显示的文字:

enter image description here

但是,我想要包含“Way One”和“Way Two”,所以我想通过inputBox 2进入,将选择范围扩展两段。我怎么能这样做呢?这是我被困的地方。这有意义吗?

1 个答案:

答案 0 :(得分:1)

好吧,在Word中,如果你想扩展一个Range以包含“更多东西”,你通常会使用Range.MoveEnd方法之一(还有一个MoveStart方法)。在Word中,Range是一组连续的字符,在文档中从左到右,从上到下运行。每个范围都有一个起点和终点;这些可以是文档中的相同位置。把它想象成一个选择,除了一个范围不可见,你可以拥有任意多的。 (在这方面与Excel类似。)如果要扩展选择,请按住Shift键并键入箭头键;在对象模型中,您使用MoveEnd(和MoveStart)。

这些方法有两个参数:UnitCount

Unit可让您将“某些内容”(字符,单词,段落,故事......)指定为WdUnits枚举。 Count可让您指定延长结尾的“事物”数量。

以下代码段演示了我如何理解您希望与用户进行交互。它从当前选择开始,而不是使用Find,但这不应该是你的问题

Dim rng As word.Range
Dim nrParas As String

Set rng = Selection.Paragraphs(1).Range
Do
    nrParas = InputBox("How many more paragraphs do you need?")
    If Not IsNumeric(nrParas) Then Exit Sub 'Or Exit Do if other code follows
    If CLng(nrParas) > 1 Then  '>1 because 1 is a given
        rng.MoveEnd wdParagraph, CLng(nrParas) - 1 '-1 because 1 is a given
    End If
    'for visual verification
    rng.Select
Loop While IsNumeric(nrParas) And nrParas > 0