Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe zu If Funktion in Word (VBA) benötigt


Hellraider
14.01.2007, 17:33
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:


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:


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.

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 ????