2011-12-08 15 views
7

Sto provando a prendere un elenco numerato creato in Outlook e modificarlo in base agli elementi di elenco di livello superiore. Sfortunatamente, l'unico modo in cui ho trovato di manipolare l'elenco è attraverso il tipo ListParagraph, che suddivide equamente tutti gli elementi dell'elenco (compresi gli elementi secondari), invece di avere accesso diverso per ogni livello nell'elenco.Word 2010 VBA - Manipolazione di elenchi numerati

C'è un modo per accedere, in un oggetto, a un elemento di elenco, insieme a tutti i suoi sotto-articoli?

Grazie.

Ecco quello che sto attualmente in uso, che funziona bene per gli elenchi con un solo livello di voci:

While i <= oMeetingWordDoc.Lists(1).ListParagraphs.Count 
     Set oRange = oMeetingWordDoc.Lists(1).ListParagraphs(i).Range 
     *Perform actions with oRange 
     i = i + 1 
    wend 

Con liste con 'un livello' voglio dire qualcosa di simile:

  1. Articolo 1
  2. Articolo 2
  3. Articolo 3

Con liste con 'sotto-voci' intendo qualcosa di simile:

  1. elemento lista 1

    a) La voce di un
    b) il punto b
    c) Il punto c

  2. Articolo 2

    a) la voce di un
    b) il punto b

  3. Articolo 3

    a) La voce di un

risposta

2

ListFormat.ListLevelNumber è quello che stai cercando. Ecco un po 'di codice che sarà in uscita il livello di elenco e il testo di ogni ListParagraph nel documento:

Sub listLevels() 
    Dim currentList As Range 
    Dim i, numLists As Integer 

    numLists = ActiveDocument.ListParagraphs.Count 

    For i = 1 To numLists 
     Set currentList = ActiveDocument.ListParagraphs(i).Range 
     MsgBox currentList.ListFormat.ListLevelNumber & " " & currentList.Text 
    Next 
End Sub 

Ovviamente si può utilizzare la condizione della ListLevelNumber = 1 per accedere soltanto liste di alto livello, per ListLevelNumber = 2 secondo livello, ecc

C'è un modo per accedere, in un oggetto, a un elemento di elenco, insieme a tutti i suoi sotto-articoli?

Io in realtà non credo che ci sia un ottimo modo per fare questo, a meno che non si costruisce da soli utilizzando la ricorsione o qualcosa (creare un oggetto con una serie di figli, e ogni bambino con la propria gamma di figli, ecc .). Non ho questo codice, ma spero che il codice che ho postato ti permetta di realizzare ciò che vuoi fare ed è molto più semplice.

Inoltre, ListFormat ha anche alcuni altri membri che possono essere utili se stai facendo molto con gli elenchi: scorri nel Visualizzatore oggetti per saperne di più.

+0

Sembra funzionare anche in MS Word. – PerryJ

3

Ho trovato il ListFormat.ListLevelNumber inaffidabile.

Ho un documento che qualcuno mi ha inviato con un elenco puntato che ha un elenco nidificato (livello 2) sotto uno degli elementi. L'elenco nidificato contiene 3 elementi secondari. Solo il sottoelemento 2 riporta che è ListLevelNumber 2. Gli altri continuano a segnalare ListLevelNumber = 1.

In una nota a margine, le voci secondarie che riportano il livello elenco errato hanno ListFormat.ListString impostato sul carattere utilizzato nel livello 2 del elenco, in modo da poter risolvere il problema controllando entrambi.

Problemi correlati