我有一个我正在使用的用户表单,允许用户输入数字。我将使用这个数字来扩展那么多段的选择。
这个想法是,我有一个包含数百个定义的文档。这些以“[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
编辑:使用上面的代码,它将选择突出显示的文字:
但是,我想要包含“Way One”和“Way Two”,所以我想通过inputBox
2进入,将选择范围扩展两段。我怎么能这样做呢?这是我被困的地方。这有意义吗?
答案 0 :(得分:1)
好吧,在Word中,如果你想扩展一个Range以包含“更多东西”,你通常会使用Range.MoveEnd
方法之一(还有一个MoveStart
方法)。在Word中,Range是一组连续的字符,在文档中从左到右,从上到下运行。每个范围都有一个起点和终点;这些可以是文档中的相同位置。把它想象成一个选择,除了一个范围不可见,你可以拥有任意多的。 (在这方面与Excel类似。)如果要扩展选择,请按住Shift键并键入箭头键;在对象模型中,您使用MoveEnd
(和MoveStart
)。
这些方法有两个参数:Unit
和Count
。
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