Automatisieren eines manuellen Prozesses mit einem Makro (Microsoft Word)
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.