Automatizzare un processo manuale con una macro (Microsoft Word)
Jason è uno studente editore di una rivista di diritto accademico. Come parte del processo di pubblicazione, deve controllare ogni frase per plagio e accuratezza e ogni citazione per garantire la corretta formattazione e supporto.
Ciò significa sostanzialmente che ogni frase deve essere supportata da una citazione inserita in una nota a piè di pagina. Attualmente lo staff copia e incolla manualmente ogni frase di testo, nota a piè di pagina e numero di nota a piè di pagina dal manoscritto dell’autore (un documento Word) in un documento Word di un redattore che viene quindi utilizzato per il controllo. Jason si chiede se esiste un modo per automatizzare questo processo di copia del “numero della nota a piè di pagina”, della “frase dal documento dell’articolo” e del “contenuto della nota a piè di pagina originale” dal documento di origine del manoscritto nel documento del foglio di lavoro.
Ciascuna delle attività menzionate da Jason può essere eseguita in modo programmatico, con alcune eccezioni irritanti. Non è così difficile scorrere le raccolte di note a piè di pagina e note di chiusura, in VBA, ed estrarne le informazioni. Queste informazioni possono quindi essere spostate in un nuovo documento che potrebbe essere utilizzato come foglio di lavoro dell’editor. La parte irritante è che i numeri delle note a piè di pagina e delle note di chiusura sono dinamici e quindi di non facile accesso.
Una discussione completa su questo irritante può essere trovata su questo sito:
http://www.vbaexpress.com/forum/showthread.php?31231
Il modo esatto in cui potresti fare una macro per trasferire le informazioni da un documento a un altro dipende, in gran parte, dalle caratteristiche delle informazioni nel documento dell’autore. Ad esempio, il documento dell’autore include uno o due spazi dopo una frase? Consente più note a piè di pagina per frase? Sono ammesse note di chiusura oltre alle note a piè di pagina? Include tabelle?
Il punto è che ci sono un numero qualsiasi di considerazioni che possono influenzare lo sviluppo di una macro. Ciò significa che qualsiasi macro dovrà essere sintonizzata con precisione sul documento sorgente con cui stai lavorando, il che significa molti test. Per darti un punto di partenza, tuttavia, considera le seguenti macro. Copieranno frasi, note a piè di pagina e note di chiusura (se presenti) da un documento di origine a un nuovo documento.
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
Questo è (di nuovo) solo un punto di partenza. Dovrai testare e modificare le macro con i tuoi documenti per assicurarti che facciano ciò che ti aspetti.
Se stai cercando risorse aggiuntive per aiutare nello sviluppo di una tale macro, potresti provare questo libro. È un omaggio e potrebbe contenere alcune macro (o esempi) che puoi adattare ai tuoi scopi specifici:
http://www.archivepub.co.uk/book.html
Non sorprenderti se la tua macro diventa piuttosto complessa nel tempo. Questo è prevedibile ogni volta che crei una macro per eseguire attività che gli esseri umani possono svolgere con relativamente poco pensiero.
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti WordTips), ho preparato una pagina speciale che include informazioni utili.
WordTips è la tua fonte di formazione economica su Microsoft Word.
(Microsoft Word è il software di elaborazione testi più popolare al mondo.) Questo suggerimento (12724) si applica a Microsoft Word 2007, 2010, 2013, 2016, 2019 e Word in Office 365.