Automatizzare un processo manuale con una macro

Jason è un editor di studente di una legge rivista accademica. Come parte del processo di pubblicazione ha bisogno di controllare ogni condanna per plagio e precisione e di ogni citazione per garantire la corretta formattazione e supporto. Ciò significa ogni frase deve essere supportata da una citazione, collocato in una nota. Attualmente il personale manualmente copia e incolla ogni frase del testo, la nota, e il numero di nota dal manoscritto dell'autore (un documento Word) nel documento di Word di un editor di personale che viene poi utilizzato per il controllo. Jason si chiede se c'è un modo per automatizzare questo processo di copia sul "numero della nota," "frase dal documento articolo" e "contenuto nota originale" dal documento di origine manoscritto nel documento foglio di lavoro.

Ciascuno dei compiti menzionati da Jason può essere fatto a livello di programmazione, con alcune eccezioni irritanti. Non è così difficile per scorrere alla nota e note di chiusura collezioni, in VBA, ed estrarre informazioni da loro. Queste informazioni possono poi essere spostato in un nuovo documento che potrebbe essere utilizzato come foglio di lavoro del redattore. La parte irritante è che i numeri delle note e note di chiusura sono dinamici, e quindi non facile accesso. Una discussione completa di questo irritante può essere trovata a questo sito:

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

Esattamente come si potrebbe fare per fare una macro per fare il trasferimento di informazioni da un documento ad un altro dipende, in gran parte, dalle caratteristiche del infomraiton nel documento dell'autore. Ad esempio, fa documento dell'autore comprendono uno o due spazi dopo una frase? Ha consente più note per frase? Ha permette note di chiusura, oltre alle note? Ha comprende tabelle?

Il punto è che ther sono un certo numero di considerazioni che possono influenzare lo sviluppo di una macro. Questo significa che tutte le macro dovranno essere finemente sintonizzato al documento di origine si sta lavorando con il che significa un sacco di test. Per darvi un punto di partenza, però, prendere in considerazione le seguenti macro. Essi copiare frasi, note, e di chiusura (se presenti) da un documento di origine di un nuovo documento.

FootnotesEndnotes Sub ()
Dim fNote Come Footnote
ENote Dim Come nota di chiusura
Dim arange come gamma
Dim sTesto As String
Dim RText As String
Dim EREF As String
Newdoc fioco come Document
OldDoc fioco come Document

Set oldDoc = ActiveDocument
Set newdoc = Documents.Add

sTesto = "--------------- NOTE ---------------" & vbCr
newDoc.Content.InsertAfter sTesto

oldDoc.Activate
Per ogni fNote In ActiveDocument.Footnotes
Set arange = fNote.Reference
Unità aRange.MoveStart: = wdSentence, Count: = - 1
Unità aRange.MoveEnd: = wdSentence
sTesto = aRange.Text
RText = fNote.Range.Text
Con 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
Chiamata WriteNewdoc (newdoc, sTesto, RText, EREF, "nota di testo")
Successivo fNote

sTesto = "--------------- NOTE ----------------" & vbCr
newDoc.Content.InsertAfter vbCr & vbCr & sTesto

Per ogni eNote In ActiveDocument.Endnotes
Set arange = eNote.Reference
Unità aRange.MoveStart: = wdSentence, Count: = - 1
Unità aRange.MoveEnd: = wdSentence
sTesto = aRange.Text
RText = eNote.Range.Text
Con 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
Chiamata WriteNewdoc (newdoc, sTesto, RText, EREF, "Endnote Text")
Successivo eNote

newDoc.Activate
End Sub

Sub WriteNewdoc (newdoc come documento, sTesto come stringa, RText As String, _
EREF As String, Astyle As String)
Dim sText1 As String
Dim sText2 As String
Dim Drange come gamma
K Dim As Long
CurDoc fioco come Document

Set curDoc = ActiveDocument
newDoc.Activate
k = InStr (sTesto, Chr (2))
Se k = 1 Poi sText = Mid (sTesto, 2) 'nel caso frase precedente è nota
sTesto = Trim (sTesto)
k = InStr (sTesto, Chr (2))
Se k = 0 Then
sTesto = sTesto & Chr (2)
k = Len (sTesto)
End If
Se k> 1 Then
sText1 = Left (sTesto, k - 1)
Altro
sText1 = ""
End If
Se k = Len (sTesto) Poi
sText2 = ""
Altro
sText2 = Mid (sTesto, k + 1)
End If
Se Len (sText2)> 0 Then
Se Mid (sText2, Len (sText2), 1) = Chr (13) Poi
sText2 = Left (sText2, Len (sText2) - 1)
End If
End If
Set Drange = newDoc.Content
dRange.Collapse Direction: = wdCollapseEnd
dRange.Select
Con la selezione
.InsertAfter VbCr & sText1
.Font.Superscript = False
Direzione .Collapse: = wdCollapseEnd
.InsertAfter EREF
.Font.Superscript = True
Direzione .Collapse: = wdCollapseEnd
.InsertAfter "" & SText2 & vbCr
.Font.Superscript = False
Direzione .Collapse: = wdCollapseEnd
.InsertAfter EREF
.Font.Superscript = True
Direzione .Collapse: = wdCollapseEnd
.InsertAfter "" & RText & vbCr & vbCr
.Font.Superscript = False
.Style = Astyle
End With
curDoc.Activate
End Sub

Questo è (ancora) solo un punto di partenza. Avrete bisogno di testare e modificare le macro con i documenti per assicurarsi che fanno quello che ci si aspetta.

Se siete alla ricerca di risorse aggiuntive per aiutare nello sviluppo di una macro, si potrebbe provare questo libro. Si tratta di un omaggio, e può avere alcune macro (o esempi) che si possono adattare alle proprie esigenze specifiche:

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

Non stupitevi se la macro diventa abbastanza complesso nel corso del tempo. Questo è normale in qualsiasi momento si crea una macro per eseguire attività che gli esseri umani possono fare con relativamente poco pensiero.

WordTips è la vostra fonte per la formazione Microsoft Word conveniente. (Microsoft Word è il più popolare software di elaborazione testi del mondo.) Questa punta (12724) si applica a Microsoft Word 2007, 2010 e 2013.