Word 2010 VBA宏重新启动编号列表

时间:2014-10-25 21:07:42

标签: list word-vba restart numbered

我有一个Word 2010文档,其中包含许多从其他文档复制的列表。不幸的是,当我将列表复制到我的文档中时,它们不再像在orginial中那样从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.文字A   2. TextB
  3. TextC
  4. TextD

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您好我在这里创建了一个完全符合您需求的宏。

您需要先将编号列表作为特定样式。这是为了确保宏只更改您需要更改的列表。

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

工作原理

我选择使用合理的方法来确定何时重新启动列表:如果前一段不是列表项,则此段必须是新列表!

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

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