我试图获得标题编号,和所有前面的标题级别数字的选择在Word VBA简单地通过文本的选择。例如:
十点一
第10.1.1节
10.1.1.1
“这是我的文字”
我希望能够选择“This is my text”(这是我的文本),并将前面的每个标题级别(即10.1.1.1、10.1.1、10.1)写入一个数组,以便我可以将每个值写入Excel中的单独单元格。
我想出了一个解决办法。
oWord.Selection.GoTo(wdGoToHeading, wdGoToPrevious).Select
以获得文本“10.1.1.1“,然而,我随后进入各种循环,这些循环通过每个先前的标题来确定标题级别并获得它们的编号,如下所示。
HeadingSearch4:
If oWord.Selection.Style = "Heading 4" Then
Do
prevHeading = oWord.Selection.Style
oWord.Selection.GoTo(wdGoToHeading, wdGoToPrevious).Select
prevHeading = oWord.Selection.Style
Loop Until prevHeading = "Heading 3"
GoTo HeadingSearch3
End If
HeadingSearch3:
If oWord.Selection.Style = "Heading 3" Then
lgHeading3num = oWord.Selection.Paragraphs(1).Range.ListFormat.ListString
Do
prevHeading = oWord.Selection.Style
oWord.Selection.GoTo(wdGoToHeading, wdGoToPrevious).Select
prevHeading = oWord.Selection.Style
Loop Until prevHeading = "Heading 2"
GoTo HeadingSearch2
End If
HeadingSearch2:
If oWord.Selection.Style = "Heading 2" Then
lgHeading2num = oWord.Selection.Paragraphs(1).Range.ListFormat.ListString
Do
prevHeading = oWord.Selection.Style
oWord.Selection.GoTo(wdGoToHeading,
wdGoToPrevious).Select
prevHeading = oWord.Selection.Style
Loop Until prevHeading = "Heading 1"
GoTo HeadingSearch1
End If
HeadingSearch1:
If oWord.Selection.Style = "Heading 1" Then
lgHeading1num = "Section " & oWord.Selection.Paragraphs(1).Range.ListFormat.ListString
End If
显然,当我深入到大纲的几个级别(iIndiee.www.example.com)时,这需要花费大量的时间10.10.5.5,因为它必须循环通过以前的每个标题,而不管标题级别如何。
我的问题是......有没有更容易使用的方法。
oWord.Selection.GoTo(wdGoToHeading, wdGoToPrevious).Select
转到上一个标题级别?例如,如果我的文本在“10.1.5”之下,我可以直接转到“10.1”而不循环前面的标题3的其余部分吗?或者是我缺少了选择的属性吗?我找不到使用“wdGoToPrevious”转到下一个最高标题级别的方法。任何帮助都将不胜感激,谢谢!
2条答案
按热度按时间j13ufse21#
我将使用伪代码,只是因为我没有时间在Word中完全测试它。
我要用另一种方法来解决你的问题。
Selection
-选择可能会根据代码或用户输入而改变,而您可能没有意识到这一点。wdAllDocRange
)。我最初考虑使用图灵磁带风格的过程,但下面的代码确定了一个更简单的方法。
上面的代码使用了一个老式的循环(因为我想在范围内来回移动),但是实际上可以将所有的主代码包含在一个
for-each
循环中xwbd5t1u2#
尝试基于以下内容的内容: