VBA WORD我怎样才能增加多级列表号?

时间:2015-03-05 14:26:12

标签: list vba ms-word increment

当我在其他Sub上输入特定号码时,我正在寻找修改列表调平号码的代码 我的另一个Sub从段落中读取一个数字并将其保存为整数 然后,有了这个整数,我需要做一些事情:

输入列表:

1.5.BLABLABLA
1.5.1.BLIBLIBLI
(SOMEWHERE WILL BE A Paragraph with "14" Text, this to integer)

输出列表:

14.5.BLABLABLA
14.5.1.BLIBLIBLI

1 个答案:

答案 0 :(得分:0)

好吧,我正在用这个

工作
Sub LimpiaTitulos()
    'Normalizador de títulos de nivel determinado(3 en este caso)
    ActiveDocument.Repaginate
    If ActiveDocument.BuiltInDocumentProperties(wdPropertyPages) > 50 Then
         If MsgBox("El documento tiene " & ActiveDocument.BuiltInDocumentProperties(wdPropertyPages) & _
        " páginas." & vbCr & "Esta macro no esta pensada para tantas páginas y puede afectar" & vbCr _
        & "al rendimiento general del ordenador." & vbCr & "¿Desea realmente ejecutarla?", vbYesNo + _
        vbInformation, "Güornin!!!!!") = vbYes Then
            GoTo Comienzo
        Else
            Exit Sub
        End If


    Else
    Comienzo:
    Dim ele As List, iTotalParas As Integer, iParacoutner As Integer, p As Paragraph, numeracion As String
         iTotalParas = ActiveDocument.ListParagraphs.Count


    'Dejamos el primer párrafo con texto, quitando retornos
    Borraespacios
    Set p = ActiveDocument.Paragraphs(1)
    lvl = Int(p.Range.Text)
    p.Range.Delete
    Borraespacios

    'Formato de título
    'Formato de título
        p.Range.Font.Size = 20
        p.Range.Font.Bold = True
        p.Range.Font.Italic = False
        p.Range.Font.Name = "Arial"
        p.OutlineLevel = wdOutlineLevel3

    '-------------------------------------------------REGEX----------------------------------------------------

        Dim lvl1 As New RegExp, lvl2 As New RegExp
        'REGEX primer nivel
        lvl1.Pattern = "[0-9]{1,}[.,][0-9]{1,}[.,][0-9]{1,}" 'Admite #.,#.,# - SUPONEMOS JAMAS HABRA #,.#,.#,.#
        lvl1.Global = False
        'REGEX segundo nivel
        lvl2.Pattern = "[0-9]{1,}[.,][0-9]{1,}" 'Admite #.,#
        lvl2.Global = False
        'Si nos topamos con un nivel 2 de mas caracteres de los deseados, lo tragamos

    '-----------------------------------------------FIN REGEX--------------------------------------------------
                For iParaCounter = 1 To iTotalParas
            '   Cogemos el parrafo actual y lo tratamos


                        Set p = ActiveDocument.ListParagraphs(iParaCounter)
                        'Metemos el formato de la numeración en un String
                            numeracion = p.Range.ListFormat.ListString
                            'Si es de más de 2 carácteres
                            'If Len(numeracion) > 2 Then
                                'Filtramos la numeración con la REGEX
                                If lvl1.test(numeracion) Then
                                    numeración = "1.1.1"
                                Else
                                    If lvl2.test(numeracion) Then
                                        numeracion = "1.1"
                                    Else
                                        GoTo Siguiente
                                    End If
                                End If

                                If p.Range.ListParagraphs.Count = 1 Then
                                        'Borramos el formato y aplicamos el nuevo

                                         p.Range.Select
                                         Selection.ClearFormatting
                                                If Len(numeracion) <= 4 Then

                                                    'p.Range.SetListLevel Level:=2
                                                    p.OutlineLevel = wdOutlineLevel3

                                                Else

                                                    'p.Range.SetListLevel Level:=3
                                                    p.OutlineLevel = 10
                                                End If
                                        'Aplicamos lista multinivel de números
                                        p.Range.ListFormat.ApplyListTemplate ListTemplate:=ListGalleries(wdOutlineNumberGallery).ListTemplates(2), _
                                        ContinuePreviousList:=True, ApplyTo:=wdListApplyToWholeList, DefaultListBehavior:=wdWord10ListBehavior

                                        'Establecemos el numero del tema

                                        p.Range.ListFormat.ListTemplate.ListLevels(1).StartAt = lvl

                                        'Si el nivel de esquema es 3, aplicamos lista nivel 2
                                        If p.OutlineLevel = 3 Then
                                                    p.Range.Font.Name = "Calibri"
                                                    p.Range.Font.Size = 14
                                                    p.Range.Font.Bold = True
                                                    p.Range.Font.Italic = False
                                                    '-----SOLO PARA TEST p.Range.Font.ColorIndex = wdBrightGreen
                                                    p.Range.SetListLevel Level:=2



                                        'Si el nivel de esquema es 4, aplicamos lista nivel 3
                                        Else
                                            If p.OutlineLevel = 10 Then
                                                        p.Range.Font.Name = "Calibri"
                                                        p.Range.Font.Size = 12
                                                        p.Range.Font.Bold = False
                                                        p.Range.Font.Italic = False
                                                        '-----SOLO PARA TEST p.Range.Font.ColorIndex = wdBlue
                                                        p.Range.SetListLevel Level:=3

                                            End If
                                        End If

                                End If
                            'End If
    Siguiente:
                Next iParaCounter


    End If
    End Sub

有了这个,我读了第一段用数字格式化的文件,并将其作为列表编号使用。现在我在想,我怎么能在一个有多个级别的文档中控制它呢?