Ich suche eine Möglichkeit, wie ich in Word 2000
einzele Absätze mit einer automatischen Randnummer (Nummer
am jeweils äusseren Seitenrand) versehen kann.
Ich habe dieses Problem provisorisch mit einem Makro
gelöst, welches aus dem markierten Text (Nummer) ein
Textfeld erstellt, das mit dem betreffenden Absatz
verknüpft ist und jeweils am äusseren Seitenrand
positioniert wird (bleibt dynamisch auch bei späterem
Seitenwechsel auf gerade / ungerade Seite).
Gibt es eine Möglichkeit (auch mittels
Makro-Programmierung), dass:
1) festgestellt werden kann, auf welcher Seite (gerade oder
ungerade Seite) sich die Textbox gerade befindet und dann,
bei einer geraden Seite, die Textbox linksbündig, sonst
rechtsbündig formatiert wird?
2) die Textbox-Formatierung (rechts/links) dynamisch
angepasst werden kann, wenn man z.B. im Verlauf der Arbeit
durch Einfügungen auf eine neue Seite gerät (von gerader
auf ungerade Seite und umgekehrt)?
3) die Randnummer automatisch (statt manuell) in die
Textbox eingefügt wird, wobei immer +1 zur letzten Zahl
gelten soll? Ich habe dazu die Nummerierungsfunktion von
Word bereits ausprobiert. Sie funktioniert insoweit, als
das automatische Erhöhen (+1) sowie die automatische
Nachführung bei Löschen einer Textbox fehlerfrei geschieht.
Probleme tauchen aber auf, wenn zwischen zwei schon
bestehende Abschnitte mit Textboxen ein neuer Abschnitt mit
neuer Textbox eingefügt wird. Dann beträgt die Zahl =
letzte verwendete Zahl +1 anstelle der chronologisch
richtigen Zahl. Seltsamerweise funktieniert dies aber, wenn
man die Nummerierungsfuntkion im Hauptdokument selber (und
nicht in einer Textbox) verwendet: dort erhöhen sich die
nachfolgenden Zahlen automatisch +1.
Ich wäre für eine Antwort auf diese Fragen äusserst
dankbar.
Herzliche Grüsse aus der Schweiz
Alain Fischbacher
> 1) festgestellt werden kann, auf welcher Seite (gerade oder
> ungerade Seite) sich die Textbox gerade befindet und dann,
> bei einer geraden Seite, die Textbox linksbündig, sonst
> rechtsbündig formatiert wird?
> 2)
Statt Textboxen, setzte FRAMES (Positionsrahmen) ein. Wenn Du
im Seiteneinrichten "mirror margins" auswählst, kannst Du die
Verbindung mit dem Aussenrand als Teil der Formatierung
feststellen. Ferner können Positionsrahmen Teil einer
FORMATVORLAGE sein - brauchst also überhaupt kein Makro. Wenn
die Formatvorlage einer Markierung zugewiesen wird, kommt der
Inhalt automatisch in den Pos.-Rahmen, korrekt positioniert.
> 3) die Randnummer automatisch (statt manuell) in die
> Textbox eingefügt wird, wobei immer +1 zur letzten Zahl
> gelten soll?
>
Schaue mal der Hilfe zur SEQ Feldfunktion an. Die wird in
Pos.-Rahmen einwandfrei funktionieren.
Cindy Meister
INTER-Solutions, Switzerland
http://www.mvps.org/word
http://homepage.swissonline.ch/cindymeister
http://go.compuserve.com/MSOfficeForum
Rückfragen & Antworten nur in der Newsgroup, bitte!
Herzliche Grüsse Alain
> [...] Ich suche nun einen Weg, wie ich die im
> Positionsrahmen befindliche Zahl automatisch und dynamisch
> bei einer ungeraden Seite linksbündig und bei einer geraden
> Seite rechtsbündig formatieren kann, [...] Wie kann ich
> herausfinden, [...]
Du musst nicht herausfinden, das macht word für dich alleine. Cindy hat es
schon angedeutet. Mach folgendes:
- Format, Formatvorlage... und leg eine neue Vorlage an.
- Die formatierst du so wie du sie willst (Zeichen, Absatz usw.)
- und jetzt noch den Positionsrahmen formatieren.
- Gruppe 'Horizontal', Wert 'Position' «aussen» oder «innen» wählen
- Grösse bestimmen, Veranken usw. und schon hast du was du willst (alles
gratis)
- Und wenn du deiner Vorlage jetzt noch ein 'Numerierung...' zufügst, dann
solltest du meines erachtens ohne das {Seq}-Feld auskommen.
--
- NT 4.0, SP6 | Office 97, SP2 | VB 6.0
--------------------------------------------------
Greetings from Switzerland
Thomas Gahler
Herzlichen Dank nochmals allen, die mir weitergehofen
haben!
Da ich mich mit Newgroups nicht so auskennen noch eine
Frage: Ist es üblich, dass man die fertige "Lösung" hier
zur Verfügung stellt? Sollte jemand Interesse am Makro
haben (habe jetzt doch ein Makro geschrieben, da es
einfacher ist und die SEQ-Funktion leichter abgeändert
werden kann als die Nummerierungs-Funktion), kann ich es
ihm gerne zustellen, E-Mail genügt.
Gruss Alain
> Ist es üblich, dass man die fertige "Lösung" hier zur Verfügung
> stellt?
üblich leider nicht, aber gerne gesehen :-) So kann man künftig bei
ähnlichen Problemen auf diese Lösung verweisen.
Viele Grüße vom Niederrhein
Lutz
Sub Randziffer_spez_a()
'
' Randziffer_spez_a Makro
' Zweck: Fügt bei dem Absatz, in welchem sich der Cursor befindet,
' eine automatisch nummerierte Ergänzungsrandziffer (Na) ein
' (N= Randziffern-Zahl der zuletzt gesetzten ordentlichen Rz)
' mit der Litera "a"
' Bemerkung: Beim Einfügen von Leerzeilen (Enter-Taste) vor einem
Absatz
' ist zu beachten, dass sich der Cursor nicht am
Absatzanfang
' befindet, sondern mindestens eine Zeile höher, da sonst
die
' zum Absatz gehörende Randziffer nicht mitverschoben
wird.
' Ist nur für spezielle Randziffern (13a, 13b, 13c etc.)
zu
' verwenden; ansonsten Makro "Randziffern" benutzen.
' Formatvorlage für Randziffern identisch mit
Formatvorlage
' für entsprechenden Absatz (bei Änderungen letzterer nach
Erstellen
' der Randziffern müssten diese manuell an die neue
Formatvorlage
' angepasst werden, da Identität von Absatzabstand,
Schriftgrösse
' etc. von Bedeutung ist); sollte ein anderes Format für
die Randziffern
' gewünscht werden, so kann dies im mit '-markierten
Abschnitt eingestellt
' werden ('-Zeichen am Rand löschen dazu).
' Um die Randziffern nach "Einschüben" zu aktualisieren,
ist das
' Makro "Rz_aktualisieren" auszuführen.
' Makro erstellt am 24.07.2001 von Alain Fischbacher
'
On Error Resume Next
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty,
Text:= _
"SEQ Randziffern \* Arabic\c", PreserveFormatting:=True
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty,
Text:= _
"SEQ Litera \* alphabetic\r 1", PreserveFormatting:=True
Selection.MoveLeft Unit:=wdCharacter, Count:=2, Extend:=wdExtend
ActiveDocument.Frames.Add Range:=Selection.Range
With Selection.Frames(1)
.Select
.TextWrap = True
.WidthRule = wdFrameAuto
.HeightRule = wdFrameAuto
.HorizontalPosition = wdFrameOutside
.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
.VerticalPosition = CentimetersToPoints(0)
.RelativeVerticalPosition = wdRelativeVerticalPositionParagraph
.HorizontalDistanceFromText = CentimetersToPoints(0.3)
.VerticalDistanceFromText = CentimetersToPoints(0)
.LockAnchor = False
End With
With Selection.Frames(1)
.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
.Borders(wdBorderRight).LineStyle = wdLineStyleNone
.Borders(wdBorderTop).LineStyle = wdLineStyleNone
.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
.Borders.Shadow = False
End With
With Options
.DefaultBorderLineStyle = wdLineStyleSingle
.DefaultBorderLineWidth = wdLineWidth075pt
.DefaultBorderColor = wdColorAutomatic
End With
End Sub
Sub Randziffer_spez()
'
' Randziffer_spez Makro
' Zweck: Fügt bei dem Absatz, in welchem sich der Cursor befindet,
' eine automatisch nummerierte Ergänzungsrandziffer (Nb, Nc,
Nd etc.)
' ein (N= Randziffern-Zahl der zuletzt gesetzten ordentlichen
Rz)
' mit den Litera "b", "c", "d" usw.
' Bemerkung: Beim Einfügen von Leerzeilen (Enter-Taste) vor einem
Absatz
' ist zu beachten, dass sich der Cursor nicht am
Absatzanfang
' befindet, sondern mindestens eine Zeile höher, da sonst
die
' zum Absatz gehörende Randziffer nicht mitverschoben
wird.
' Ist nur für spezielle Randziffern (13a, 13b, 13c etc.)
zu
' verwenden; ansonsten Makro "Randziffern" benutzen.
' Formatvorlage für Randziffern identisch mit
Formatvorlage
' für entsprechenden Absatz (bei Änderungen letzterer nach
Erstellen
' der Randziffern müssten diese manuell an die neue
Formatvorlage
' angepasst werden, da Identität von Absatzabstand,
Schriftgrösse
' etc. von Bedeutung ist); sollte ein anderes Format für
die Randziffern
' gewünscht werden, so kann dies im mit '-markierten
Abschnitt eingestellt
' werden ('-Zeichen am Rand löschen dazu).
' Um die Randziffern nach "Einschüben" zu aktualisieren,
ist das
' Makro "Rz_aktualisieren" auszuführen.
' Makro erstellt am 24.07.2001 von Alain Fischbacher
'
On Error Resume Next
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty,
Text:= _
"SEQ Randziffern \* Arabic\c", PreserveFormatting:=True
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty,
Text:= _
"SEQ Litera \* alphabetic\n", PreserveFormatting:=True
Selection.MoveLeft Unit:=wdCharacter, Count:=2, Extend:=wdExtend
ActiveDocument.Frames.Add Range:=Selection.Range
With Selection.Frames(1)
.Select
.TextWrap = True
.WidthRule = wdFrameAuto
.HeightRule = wdFrameAuto
.HorizontalPosition = wdFrameOutside
.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
.VerticalPosition = CentimetersToPoints(0)
.RelativeVerticalPosition = wdRelativeVerticalPositionParagraph
.HorizontalDistanceFromText = CentimetersToPoints(0.3)
.VerticalDistanceFromText = CentimetersToPoints(0)
.LockAnchor = False
End With
With Selection.Frames(1)
.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
.Borders(wdBorderRight).LineStyle = wdLineStyleNone
.Borders(wdBorderTop).LineStyle = wdLineStyleNone
.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
.Borders.Shadow = False
End With
With Options
.DefaultBorderLineStyle = wdLineStyleSingle
.DefaultBorderLineWidth = wdLineWidth075pt
.DefaultBorderColor = wdColorAutomatic
End With
End Sub
Sub Randziffern()
'
' Randziffern Makro
' Zweck: Fügt bei dem Absatz, in welchem sich der Cursor befindet,
' eine automatisch nummerierte Randziffer ein (n+1), welche
fest
' mit dem Absatz verbunden ist und jeweils dynamisch am
äusseren
' Seitenrand positioniert wird
' Bemerkung: Beim Einfügen von Leerzeilen (Enter-Taste) vor einem
Absatz
' ist zu beachten, dass sich der Cursor nicht am
Absatzanfang
' befindet, sondern mindestens eine Zeile höher, da sonst
die
' zum Absatz gehörende Randziffer nicht mitverschoben
wird.
' Formatvorlage für Randziffern identisch mit
Formatvorlage
' für entsprechenden Absatz (bei Änderungen letzterer nach
Erstellen
' der Randziffern müssten diese manuell an die neue
Formatvorlage
' angepasst werden, da Identität von Absatzabstand,
Schriftgrösse
' etc. von Bedeutung ist); sollte ein anderes Format für
die Randziffern
' gewünscht werden, so kann dies im mit '-markierten
Abschnitt eingestellt
' werden ('-Zeichen am Rand löschen dazu).
' Um die Randziffern nach "Einschüben" zu aktualisieren,
ist das
' Makro "Rz_aktualisieren" auszuführen.
' Um spezielle Randziffern zu erstellen (13a, 13b, 13c
etc.) sind die
' Makros "Randziffer_spez_a" und "Randziffer_spez" zu
verwenden.
' Um nach einer automatisch eingefügten Randziffer eine
Lücke zu lassen
' und mit einem höheren Wert weiterzufahren (z.B. nach Rz
280 gleich
' Rz 300), ist wie folgt vorzugehen:
' - automatisch nummerierte Rz, welche abgeändert (erhöht)
werden soll,
' markieren (Feldfunktion)
' - rechte Maustaste drücken, Menupunkt "Feldfunktionen
ein/aus" drücken,
' um Feldfunktion (automatische Randziffern-Zahl)
auszuschalten
' - Feldfunktion zeigt nun Text an: "{ SEQ Randziffern \n
\* MERGEFORMAT }"
' - Text in Feldfunktion ändern in: "{ SEQ Randziffern \r
n \* MERGEFORMAT }",
' wobei n = neue Randziffern-Zahl (also z.B. 300)
' - Feldfunktion-Text wieder markieren, rechte Maustaste
drücken, Menupunkt
' "Felder aktualisieren" oder "Feldfunktionen ein/aus"
drücken, um
' Feldfunktion (Randziffern-Zahl) wieder einzuschalten
' - Feldfunktion erscheint nun wieder als Zahl (z.B. 300);
ab jetzt kann
' wieder ganz normal weiterverfahren werden (nächste Rz
= n+1, z.B. 301).
' Makro erstellt am 24.07.2001 von Alain Fischbacher
'
On Error Resume Next
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty,
Text:= _
"SEQ Randziffern \* Arabic\n", PreserveFormatting:=True
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
ActiveDocument.Frames.Add Range:=Selection.Range
With Selection.Frames(1)
.Select
.TextWrap = True
.WidthRule = wdFrameAuto
.HeightRule = wdFrameAuto
.HorizontalPosition = wdFrameOutside
.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
.VerticalPosition = CentimetersToPoints(0)
.RelativeVerticalPosition = wdRelativeVerticalPositionParagraph
.HorizontalDistanceFromText = CentimetersToPoints(0.3)
.VerticalDistanceFromText = CentimetersToPoints(0)
.LockAnchor = False
End With
With Selection.Frames(1)
.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
.Borders(wdBorderRight).LineStyle = wdLineStyleNone
.Borders(wdBorderTop).LineStyle = wdLineStyleNone
.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
.Borders.Shadow = False
End With
With Options
.DefaultBorderLineStyle = wdLineStyleSingle
.DefaultBorderLineWidth = wdLineWidth075pt
.DefaultBorderColor = wdColorAutomatic
End With
End Sub
Sub Rz_aktualisieren()
'
' Rz_aktualisieren Makro
' Zweck: Aktualisiert alle vorhandenen automatiserten Felder
' (neben den Randziffern auch alle anderen Formatfelder
' wie z.B. Inhaltsverzeichnisse, Seitenzahlen etc.)
' Makro erstellt am 24.07.2001 von Alain Fischbacher
'
Selection.WholeStory
Selection.Fields.Update
End Sub
Sub Randtext()
'
' Randtext Makro
' Zweck: Fügt markierten Text als Marginalie (Randtext) an den
' rechten Seitenrand des betreffenden Absatzes (vom Standort
' der Markierung aus gesehen)
' Bemerkung: Zur Änderung der Anordnung des Randtextes (z.B.
automatisch
' an Aussenseite) "Selection.ShapeRange.Left =
wdShapeOutside"
' Makro erstellt am 20.07.2001 von Alain Fischbacher
'
On Error Resume Next
Selection.CreateTextbox
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Solid
Selection.ShapeRange.Fill.ForeColor.RGB = RGB(255, 255, 255)
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoFalse
Selection.ShapeRange.LockAspectRatio = msoFalse
Selection.ShapeRange.Height = 28.35
Selection.ShapeRange.Width = 70.85
Selection.ShapeRange.TextFrame.MarginLeft = 8.5
Selection.ShapeRange.TextFrame.MarginRight = 0#
Selection.ShapeRange.TextFrame.MarginTop = 0#
Selection.ShapeRange.TextFrame.MarginBottom = 0#
Selection.ShapeRange.RelativeHorizontalPosition = _
wdRelativeHorizontalPositionPage
Selection.ShapeRange.RelativeVerticalPosition = _
wdRelativeVerticalPositionParagraph
Selection.ShapeRange.Left = wdShapeRight
Selection.ShapeRange.Top = CentimetersToPoints(0)
Selection.ShapeRange.LockAnchor = False
Selection.ShapeRange.WrapFormat.AllowOverlap = True
Selection.ShapeRange.WrapFormat.Type = wdWrapSquare
Selection.ShapeRange.WrapFormat.Side = wdWrapBoth
Selection.ShapeRange.WrapFormat.DistanceTop = CentimetersToPoints(0)
Selection.ShapeRange.WrapFormat.DistanceBottom =
CentimetersToPoints(0)
Selection.ShapeRange.WrapFormat.DistanceLeft =
CentimetersToPoints(0)
Selection.ShapeRange.WrapFormat.DistanceRight =
CentimetersToPoints(0)
With Selection.ParagraphFormat
.LeftIndent = CentimetersToPoints(0)
.RightIndent = CentimetersToPoints(0)
.SpaceBefore = 6
.SpaceAfter = 0
.LineSpacingRule = wdLineSpaceExactly
.LineSpacing = 12
.Alignment = wdAlignParagraphLeft
.WidowControl = True
.KeepWithNext = False
.KeepTogether = False
.PageBreakBefore = False
.NoLineNumber = False
.Hyphenation = True
.FirstLineIndent = CentimetersToPoints(0)
.OutlineLevel = wdOutlineLevelBodyText
End With
Selection.Font.Name = "Arial Narrow"
Selection.Font.Bold = True
Selection.Font.Size = 12
End Sub
---------------- EOF -----------------------------------------------