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.