2

我有一个 Word 2010 文档,其中包含许多从另一个文档复制的列表。不幸的是,当我将列表复制到我的文档中时,它们不再像在原始列表中那样从 1 开始,而是从以前的列表继续,导致我的文档出现混乱。

我需要我的宏沿着文档中的所有编号列表运行,并在 1 处重新启动每个列表。我使用 listformat.applylisttemplate 进行了尝试,但是当使用“For Each li In ActiveDocument.Lists”调用我的列表时,我无法使用 listformat 函数. 请参阅下面的代码片段。

Set temp3 = wrdApp.ListGalleries(wdNumberGallery).ListTemplates(1).ListLevels(1)
    With temp3
        .StartAt = 1
End With

For Each li In ActiveDocument.Lists
    li.Range.ListFormat.ApplyListTemplate ListTemplate:=temp3
Next

显然,我想要以下形式的东西:

For Each li In ActiveDocument.Lists
    li. => restart list count here
Next

任何人都可以帮忙吗?谢谢!

另外:我当前的文本如下所示,我正在尝试让宏在 Word 中以 1 重新启动每个列表:
INPUT:
Sometext
3. TextA
4. TextB
5. TextC
6. TextD

其他一些文字
21. 文字 q
22. 文字 w
23. 文字 e

宏后的输出:
1. TextA
2. TextB
3. TextC
4. TextD

其他一些文字
1. 文字 q
2. 文字 w
3. 文字 e

4

2 回答 2

0

我没有一个例子来尝试这个,但试一试,也许它会工作?

Sub ListRestart()
For Each li In ListGalleries(wdNumberGallery).ListTemplates
    li.ListLevels(1).StartAt = 1
Next
End Sub

编辑:我同意,上述方法不起作用。下面将确定我们要重置编号的正确段落。但是,我无法弄清楚如何从那里重置编号。也许这会让其他人更接近答案?

Sub ListRestart()
' for each paragraph
' If this paragraph is a list (ListType = 3) and last paragraph was not (ListType = 0) then restart numbering
Dim n As Integer, lastListType As Integer
For Each myPara In ActiveDocument.Paragraphs
    n = n + 1
    'Debug.Print n & myPara.Range.Text & " ListType: " & myPara.Range.ListFormat.ListType
    If myPara.Range.ListFormat.ListType = 3 Then
        If lastListType = 0 Then
            Debug.Print n & " " & myPara.Range.Text & " Reset numbering here"
        End If
    End If
    lastListType = myPara.Range.ListFormat.ListType
Next
End Sub
于 2014-10-28T21:32:25.137 回答
0

嗨,我在这里创建了一个宏,它完全符合您的要求。

您需要先将编号列表设为某种样式。这是为了确保宏只更改您需要更改的列表。

https://sites.google.com/site/anvilsoup/word/fix-numbered-items

这个怎么运作

我选择使用一种合理的方法来确定何时重新启动列表:如果上一段不是列表项,那么这一段必须是一个新列表!

这个逻辑是大多数人在开始新列表时使用的逻辑。这是明智和传统的。

注意:如果您需要在列表中放置一个未编号的段落,您应该考虑使用换行符 (SHIFT-ENTER) 而不是分段符。使用换行符还将确保保留缩进。不要做奇怪的事情,比如关闭该段落的编号。从技术上讲,该文本是同一编号项目的一部分,因此它应该在同一段落中。

于 2017-09-17T23:05:44.440 回答