SonyUserforum

SonyUserforum (https://www.sonyuserforum.de/forum/index.php)
-   Café d`Image (https://www.sonyuserforum.de/forum/forumdisplay.php?f=94)
-   -   Hilfe zu If Funktion in Word (VBA) benötigt (https://www.sonyuserforum.de/forum/showthread.php?t=34015)

Hellraider 14.01.2007 17:33

Hilfe zu If Funktion in Word (VBA) benötigt
 
Ich habe folgende Problemstellung:

Innerhalb eines Word 2003 Dokumentes möchte ich nach jeder Überschrift 2ter Ebene (bis auf die erste Überschrift) einen Zeilenumbruch oberhalb durchführen.

Mein Code sieht bisher so aus:

Code:

y = 0 'Anzahl vorhandener Überschriften 2.Ebene
ya = 0 'Anzahl aller vorgenommenen Seitenumbrüche

With ActiveDocument.Content.Find 'Ermittlung aller vorhandenen Überschriften 2.Ebene
            .ClearFormatting
            .Style = wdStyleHeading2
                Do While .Execute(FindText:="", Forward:=True, Format:=True) = True
                y = y + 1
                Loop
        End With

Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:="1" 'Zu 1. Seite des Dokumentes wechseln
       
        For i = 0 To y
            Selection.Find.ClearFormatting
            Selection.Find.Style = ActiveDocument.Styles(wdStyleHeading2)
                With Selection.Find
                    .Forward = True
                    .Wrap = wdFindContinue
                    .Format = True
                End With
            If i > 0 Then
                Selection.Find.Execute
                With Selection.ParagraphFormat
                  .PageBreakBefore = True
                  ya = ya + 1 'für interne Zählung aller durchgeführten Umbrüche
                End With
            End If
        Next i

Probleme bereit mir derzeit folgender Code-Teil:

Code:

If i > 0 Then
                Selection.Find.Execute
                With Selection.ParagraphFormat
                      .PageBreakBefore = True
                End With
End If

Dieser sollte eigentlich bewirken, das nach der ersten Fundstelle (i=0) eben kein Zeilenumbruch vorgenommen wird, aber irgendwie klappt das nicht. Der Zähler ist beim ersten Durchlauf der If Funktion 0 und überspringt laut Überwachungsanzeige auch die Teile innerhalb der If Funktion (als erstes wird If i > 0 Then ausgeführt und dann wird zu End If gesprungen). Trotzdem wird aber ein Zeilenumbruch durchgeführt, so dass der Fehler eigentlich irgendwo innerhalb der if Funktion selbst zu suchen sein muss, aber wo? :?

Kann mir da jemand einen Tip geben?

BeHo 15.01.2007 14:59

Hallo Stefan,

so ganz passt Dein Code nicht zu den Vorgaben.
Du schreibst von Zeilenumbruch oberhalb nach den Zweilevel-Überschriften. Dein Programm fügt dagegen Seitenumbrüche vor den Überschriften ein. Ich nehme an, dass auch dies gemeint ist, weil es doch sinnvoller erscheint. ;)

Dein Fehler liegt im .Execute innerhalb der IF-Abfrage. Damit wird die eigentlich Suche erst im zweiten Schleifendurchlauf der FOR-Schleife durchgeführt und damit ist automatisch die Bedingung schon bei der ersten gefundenen Überschrift2 wahr.

Im folgenden ein etwas verkürzter Code. Zwei Durchläufe sind für diese Aufgabe ja eigentlich nicht nötig.

Code:

y = 0 'Anzahl vorhandener Überschriften 2.Ebene
ya = 0 'Anzahl aller vorgenommenen Seitenumbrüche

    Selection.HomeKey Unit:=wdStory
    With ActiveDocument.Content.Find 'Ermittlung aller vorhandenen Überschriften 2.Ebene
        .ClearFormatting
        .Style = wdStyleHeading2
        Do While .Execute(FindText:="", Forward:=True, Format:=True) = True
            If y > 0 Then
                .Parent.ParagraphFormat.PageBreakBefore = True
                ya = ya + 1
            End If
            y = y + 1
        Loop
    End With
End Sub

Gruß,
Bernd

ManniC 18.01.2007 22:44

@Stefan:

Wie ich in einem anderen Forum gelesen habe hat sich Dein Problem auf wundersame Art und Weise erledigt.......... ;) :cool: ---- oder ????


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:55 Uhr.