Forenindex » Programme » Office » Microsoft Office » VBA-Skript für Fußnoten-Defizit-Workaround

VBA-Skript für Fußnoten-Defizit-Workaround

attisoft
Beiträge gesamt: 4

3. Sep 2013, 12:01
Bewertung:

gelesen: 3523

Beitrag als Lesezeichen
Moin zusammen,

es geht um das altbekannte Problem fehlender Anpassungsmöglichkeiten bei Word-Fußnoten (in dem Falle zweispaltige Fußnoten unter einspaltigem Text). Bis da jemand eine professionelle Lösung findet, möchte ich eine Zwischenlösung finden:

Das Dokument hat ca.3200 Fußnoten, die ich mit VBA in {X fussnotentext} an den Stellen im Text stehen habe, wo dann der Referenztext steht. Im Text stehen auch noch ca. 800 Randnoten, die ich mit "{Y randnotentext} gekennzeichnet habe.

Also z.B (nur zur Veranschaulichung, da das Werk fremdsprachig ist:
"...da sagte Ali-Baba {X Ali-Baba war ein Räuber} zu dem Fürsten Gargamel {Y s.Seite 46} ..."
{X...} => Textfeld1
{Y...} => Textfeld2

Das Umwandeln in Fußnoten per Skript ist kein Problem, aber jetzt zu dem Fußnotenproblem: Bei der Masse von Fußnoten MUSS ich diese mehrspaltig bzw. als Fließtext aufbauen (die Fußnoten bestehen aus max. 5 Wörtern).

Letztendlich ist es so geplant, dass ich per Skript realisieren will, dass
- JE SEITE zwei Textboxen angelegt werden:
TextFeld1 enthält die Inhalte von {X ...} und steht am Seitenende
TextFeld2 enthält die Inhalte von {Y ...} und steht am Rand
- In der For-Next-Schleife, in der ich die Zeichen in Fußnoten umandle, soll jetzt jede Fußnote in das jeweilige Textfeld geschrieben werden, wobei das Positionieren/Verankern zweitrangig ist.

Zusammenfassend soll das Ziel sein, jeweils am Seitendende ein weiß gefüllte Textbox verankert zu haben, die nur
<Fußnoten-Nummer><Fußnotentext> enthält und die "eigentlichen Fußnoten" (dann weiß und in Schriftgröße4) überlagert. Dann könnte man die Inhalte frei editieren oder per Skript weiterverarbeiten, auch wenn die Fußnoten dann nicht mehr dynamisch sind (und das Skript bei jeder Änderung vorsichtshalber neu ausgeführt werden muss)...

Das Skript:
Code
Sub TestFussnotenErzeugen() 

'***Findet den geklamerten Text***
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
With Selection.Find
.Text = "{X" 'als Beispiel die Schleife für die Fußnoten
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.Extend
Selection.Extend Character:="}"
Selection.Cut
'***Fügt den zwischengespeicherten Text als Fußnote ein***
With ActiveDocument.Range(Start:=ActiveDocument.Content.Start, End:=ActiveDocument.Content.End)
With .FootnoteOptions
.Location = wdBottomOfPage
.NumberingRule = wdRestartContinuous
.StartingNumber = 1
.NumberStyle = wdNoteNumberStyleArabic
End With
.Footnotes.Add Range:=Selection.Range, Reference:=""
End With
Selection.PasteAndFormat (wdPasteDefault)
'***Wiederholt die ersten beiden Schritte, bis keine Klammern mehr gefunden werden***
On Error GoTo Ende
Call TestFussnotenErzeugen
Ende:
End Sub



Ich hoffe, ich konnte mich wenigstens halbwegs verständlich ausdrücken...

Bin dankbar für jede Hilfe!

Viele Grüße,
Oliver

VBA-Skript für Fußnoten-Defizit-Workaround

Hallenstein
Beiträge gesamt: 142

5. Sep 2013, 13:01
Bewertung:

gelesen: 3430

Beitrag als Lesezeichen
Hallo Oliver,

ich habe keine fertige Lösung, aber ich hätte vielleicht ein paar Ideen einzubringen, eventuell hilft es dir ja weiter:

#Randnoten
Wäre es nicht besser, diese einfach nur mit einem anderen Absatzformat zu versehen, welches einen Positionsrahmen enthält? Dann entfällt an der Stelle das Anlegen des Textrahmens. Außerdem steht die Randnote direkt an der Stelle wo auch der Verweis ist. Mir ist nämlich noch unklar, wie das funktionieren soll, wenn es nur ein Textrahmen für die Marginalspalte ist. Hab ich da deine Lösung übersehen?

#Fußnoten
Bringt es dir eine Erleichterung/Vereinfachung, wenn das Textfeld schon auf der Seite definiert ist? Sprich, wenn es schon in der Fußzeile des Dokuments steht?

Ich gebe zu, ich hatte keine Zeit bisher deinen Code auszuprobieren. Ist bisher nur eine Idee, auf das gelesene.

Schöne Grüße,
Hallenstein.

VBA-Skript für Fußnoten-Defizit-Workaround

attisoft
Beiträge gesamt: 4

5. Sep 2013, 13:42
Bewertung:

gelesen: 3419

Beitrag als Lesezeichen
Moin Hallenstein,

es wäre sicher ein geringes Problem, je Seite eine Textbox zu erstellen, in die dann geschrieben werden könnte (die Seitenränder sind entsprechend gesetzt, dass immer der gleiche Freiraum dafür besteht).

Problem ist für mich, den numerischen Fußnotenzähler je Seite mit dem Fußnotentext in das jeweilige Textfeld zu schreiben.

Wenn es also als Step1 eine Lösung gibt, dass ich auf den 800 Seiten jeweils zwei Textfelder setze und verankere, die dann über VBA mit den entsprechenden Inhalten je Seite gefüllt werden, immer her damit, das wäre schonmal eine deutliche Vereinfachung. Alles weitere könnte man ja in einem darauf aufbauenden Skript realisieren.

Ich habe zwei Textfelder genommen, da ich kein Spaltenlayout (ungerade/gerade Seite) unterscheiden konnte und manche Seiten z.B. 20 Fußnoten und 8 Randnoten haben. So müsste ich die Randnoten-Textfelder nur bündig mit der ersten Zeile verankern und hätte eine Lösung analog zu einer "schmalen Spalte, immer an der Außenseite des Buches".

Das Skript war auch in erster Linie dazu da, die verwendbaren Daten darzustellen, es kann auch ein autarkes Skript sein, das im Nachgang ausgeführt wird...

Vielen Dank schon mal, Oliver Attendorn

VBA-Skript für Fußnoten-Defizit-Workaround

attisoft
Beiträge gesamt: 4

25. Sep 2013, 11:09
Bewertung:

gelesen: 3306

Beitrag als Lesezeichen
Liebes Forum,

kennt niemand eine Lösung, wie per Skript ein Textfeld adressiert und Fußnotenwert/-text hineingeschrieben wird? Ich bekomme das leider nicht hin...

Die Textfelder würde ich notfalls manuell setzen/verankern...

Nochmal das Skript Stand heute:

Code
Sub TestFussnotenErzeugen()  

'***Findet den geklamerten Text***
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
With Selection.Find
.Text = "{X" 'als Beispiel die Schleife für die Fußnoten
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.Extend
Selection.Extend Character:="}"
Selection.Cut
'***Fügt den zwischengespeicherten Text als Fußnote ein***
With ActiveDocument.Range(Start:=ActiveDocument.Content.Start, End:=ActiveDocument.Content.End)
With .FootnoteOptions
.Location = wdBottomOfPage
.NumberingRule = wdRestartContinuous
.StartingNumber = 1
.NumberStyle = wdNoteNumberStyleArabic
End With
.Footnotes.Add Range:=Selection.Range, Reference:=""
End With
Selection.PasteAndFormat (wdPasteDefault)
'***Wiederholt die ersten beiden Schritte, bis keine Klammern mehr gefunden werden***
On Error GoTo Ende
Call TestFussnotenErzeugen
Ende:
End Sub


Viele Grüße aus dem Norden,
Oliver