Jason ist studentischer Redakteur einer Zeitschrift für akademisches Recht. Im Rahmen des Veröffentlichungsprozesses muss er jeden Satz auf Plagiate und Richtigkeit sowie jedes Zitat überprüfen, um eine ordnungsgemäße Formatierung und Unterstützung sicherzustellen.

Dies bedeutet im Grunde, dass jeder Satz durch ein Zitat in einer Fußnote unterstützt werden muss. Derzeit kopiert und fügt der Mitarbeiter jeden Textsatz, jede Fußnote und jede Fußnotennummer manuell aus dem Manuskript des Autors (einem Word-Dokument) in das Word-Dokument eines Personaleditors ein, das dann zur Überprüfung verwendet wird. Jason fragt sich, ob es eine Möglichkeit gibt, diesen Vorgang des Kopierens der „Fußnotennummer“, des „Satzes aus dem Artikeldokument“ und des „ursprünglichen Fußnoteninhalts“ aus dem Manuskriptquelldokument in das Arbeitsblattdokument zu automatisieren.

Jede der von Jason genannten Aufgaben kann mit einigen irritierenden Ausnahmen programmgesteuert ausgeführt werden. Es ist nicht so schwierig, die Fußnoten- und Endnotensammlungen in VBA zu durchlaufen und Informationen daraus zu extrahieren. Diese Informationen können dann in ein neues Dokument verschoben werden, das als Arbeitsblatt des Editors verwendet werden kann. Der irritierende Teil ist, dass die Fußnoten- und Endnotennummern dynamisch sind und daher nicht so leicht zugänglich sind.

Eine vollständige Diskussion dieses Reizstoffs finden Sie auf dieser Website:

http://www.vbaexpress.com/forum/showthread.php?31231

Wie genau Sie ein Makro erstellen, um die Informationsübertragung von einem Dokument in ein anderes durchzuführen, hängt zum großen Teil von den Merkmalen der Informationen im Dokument des Autors ab. Enthält das Dokument des Autors beispielsweise ein oder zwei Leerzeichen nach einem Satz? Erlaubt es mehrere Fußnoten pro Satz? Erlaubt es neben Fußnoten auch Endnoten? Enthält es Tabellen?

Der Punkt ist, dass es eine Reihe von Überlegungen gibt, die die Entwicklung eines Makros beeinflussen können. Dies bedeutet, dass alle Makros genau auf das Quelldokument abgestimmt werden müssen, mit dem Sie arbeiten – was viele Tests bedeutet. Berücksichtigen Sie jedoch die folgenden Makros, um einen Ausgangspunkt zu erhalten. Sie kopieren Sätze, Fußnoten und Endnoten (falls vorhanden) aus einem Quelldokument in ein neues Dokument.

Sub FootnotesEndnotes()

Dim fNote As Footnote     Dim eNote As Endnote     Dim aRange As Range     Dim sText As String     Dim rText As String     Dim eRef As String     Dim newDoc As Document     Dim oldDoc As Document

Set oldDoc = ActiveDocument     Set newDoc = Documents.Add

sText = "---------------FOOTNOTES---------------" & vbCr     newDoc.Content.InsertAfter sText

oldDoc.Activate     For Each fNote In ActiveDocument.Footnotes         Set aRange = fNote.Reference         aRange.MoveStart unit:=wdSentence, Count:=-1         aRange.MoveEnd unit:=wdSentence         sText = aRange.Text         rText = fNote.Range.Text         With fNote.Reference.Characters.First             .Collapse             .InsertCrossReference wdRefTypeFootnote, _               wdFootnoteNumberFormatted, fNote.Index             eRef = .Characters.First.Fields(1).Result             Selection.Start = fNote.Reference.Start - Len(eRef)

Selection.End = fNote.Reference.Start             Selection.Delete         End With         Call WriteNewdoc(newDoc, sText, rText, eRef, "Footnote Text")

Next fNote

sText = "---------------ENDNOTES----------------" & vbCr     newDoc.Content.InsertAfter vbCr & vbCr & sText

For Each eNote In ActiveDocument.Endnotes         Set aRange = eNote.Reference         aRange.MoveStart unit:=wdSentence, Count:=-1         aRange.MoveEnd unit:=wdSentence         sText = aRange.Text         rText = eNote.Range.Text         With eNote.Reference.Characters.First             .Collapse             .InsertCrossReference wdRefTypeEndnote, _               wdEndnoteNumberFormatted, eNote.Index             eRef = .Characters.First.Fields(1).Result             Selection.Start = eNote.Reference.Start - Len(eRef)

Selection.End = eNote.Reference.Start             Selection.Delete         End With         Call WriteNewdoc(newDoc, sText, rText, eRef, "Endnote Text")

Next eNote

newDoc.Activate End Sub

Sub WriteNewdoc(newDoc As Document, sText As String, rText As String, _        eRef As String, aStyle As String)

Dim sText1 As String     Dim sText2 As String     Dim dRange As Range     Dim k As Long     Dim curDoc As Document

Set curDoc = ActiveDocument     newDoc.Activate     k = InStr(sText, Chr(2))

If k = 1 Then sText = Mid(sText, 2) 'in case previous sentence has note     sText = Trim(sText)

k = InStr(sText, Chr(2))

If k = 0 Then         sText = sText & Chr(2)

k = Len(sText)

End If     If k > 1 Then         sText1 = Left(sText, k - 1)

Else         sText1 = ""

End If     If k = Len(sText) Then         sText2 = ""

Else         sText2 = Mid(sText, k + 1)

End If     If Len(sText2) > 0 Then         If Mid(sText2, Len(sText2), 1) = Chr(13) Then             sText2 = Left(sText2, Len(sText2) - 1)

End If     End If     Set dRange = newDoc.Content     dRange.Collapse Direction:=wdCollapseEnd     dRange.Select     With Selection         .InsertAfter vbCr & sText1         .Font.Superscript = False         .Collapse Direction:=wdCollapseEnd         .InsertAfter eRef         .Font.Superscript = True         .Collapse Direction:=wdCollapseEnd         .InsertAfter " " & sText2 & vbCr         .Font.Superscript = False         .Collapse Direction:=wdCollapseEnd         .InsertAfter eRef         .Font.Superscript = True         .Collapse Direction:=wdCollapseEnd         .InsertAfter " " & rText & vbCr & vbCr         .Font.Superscript = False         .Style = aStyle     End With     curDoc.Activate End Sub

Dies ist (wieder) nur ein Ausgangspunkt. Sie müssen die Makros mit Ihren Dokumenten testen und optimieren, um sicherzustellen, dass sie das tun, was Sie erwarten.

Wenn Sie nach zusätzlichen Ressourcen suchen, um die Entwicklung eines solchen Makros zu unterstützen, können Sie dieses Buch ausprobieren. Es ist ein Werbegeschenk und enthält möglicherweise einige Makros (oder Beispiele), die Sie an Ihre spezifischen Zwecke anpassen können:

http://www.archivepub.co.uk/book.html

Seien Sie nicht überrascht, wenn Ihr Makro im Laufe der Zeit ziemlich komplex wird. Dies ist zu erwarten, wenn Sie ein Makro erstellen, um Aufgaben auszuführen, die Menschen mit relativ wenig Denken erledigen können.

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der WordTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

WordTips ist Ihre Quelle für kostengünstige Microsoft Word-Schulungen.

(Microsoft Word ist die weltweit beliebteste Textverarbeitungssoftware.) Dieser Tipp (12724) gilt für Microsoft Word 2007, 2010, 2013, 2016, 2019 und Word in Office 365.