none
Word 2003 (VBA): Inhalt und FV eines Paragraphs stimmen nicht überein RRS feed

  • Frage

  • Hallo,

    ich suche zu Tabellen in Word passende Überschriften. Beispiel:

    5.3 Schöne Tabellen

    5.3.1 Meine erste schöne Tabelle

    <Tabelle ...>

    In diesem Beispiel sollte als Ergebnis 'Meine erste schöne Tabelle' herauskommen.

    Mein Makro durchläuft also alle Tabellen, geht dann im Text zurück und sucht nach einer Überschrift. Falls irgendwelcher Standardtext dazwischen liegt, soll dieser ignoriert werden. Falls 5.3.1 fehlen würde, soll die Überschrift 5.3 ermittelt werden.

    Das geht dann bei mir etwa so

    For Each oTbl In doc.Tables
          iStep = 0  'Zähler für Schritte nach oben
          Set rng = oTbl.Range
          rng.Collapse wdCollapseStart
          Do
             Set par = rng.Paragraphs(1)
             If par.Range.ParagraphFormat.OutlineLevel <= wdOutlineLevel4 Then
                sText = par.Range.Text  'dieser Text muss dann noch nachbearbeitet werden
                Exit Do
             End If
             rng.Move wdParagraph, -1
            iStep = iStep +1
            if iStep > 10 Then ... es reicht - erfolglos abbrechen
         Loop

    Next

    Mit obigen Beispiel enthält man mit
     par.Range.Text den Text der Überschrift 3 aber
     par.Range.ParagraphFormat.OutlineLevel ist gleich 10 und
     par.Range.ParagrapFormat ist gleich Standard

    Im nächsten Schritt - nach Move wdParagraph, -1 erhält man mit obigem Beispiel als Text die Überschrift 2 aber als FV 'Überschrift 3', die FV des zuvor bearbeiteten Absatzes.

    Was läuft hier falsch?

    Übrigens finde ich es recht bemerkenswert, dass bereist nach wdCollapseStart Absatz 1 von rng den vorangehenden Absatz enthält. Eigentlich hätte ich erwartet, dass man rng.Move wd... , -x benötigt.


    P.S.: Gibt es eigentlich keine eigene NG für Word und Word VBA??

     

     

     


    Grüße aus Köln am Rhein - Klaus Trapp
    Donnerstag, 28. Juli 2011 12:58

Antworten

  • Mit der Previous-Methode funktioniert es

          Set rng = oTbl.Range
          rng.Collapse wdCollapseStart
          Set par = rng.Paragraphs(1)
          Do
             Set rPar = par.Previous.Range
             If rPar.ParagraphFormat.OutlineLevel <= wdOutlineLevel5 Then

         Loop

    und jetzt natürlich ohne Move wdParagraph, -1

     

     


    Grüße aus Köln am Rhein - Klaus Trapp
    Freitag, 29. Juli 2011 14:14

Alle Antworten