Automatisere en manuell prosess med en Macro
October 11 by Eliza
Jason er en student redaktør av en akademisk lov journal. Som en del av publiseringsprosessen han trenger for å sjekke hver setning for plagiat og nøyaktighet og hver sitat for å sikre riktig formatering og støtte. Dette betyr i utgangspunktet hver setning må støttes av et sitat, plassert i en fotnote. I dag den ansatte manuelt kopierer og limer hver tekst setning, fotnote, og fotnote nummer fra forfatterens manuskript (et Word-dokument) i en stab redaktørens Word-dokument som deretter brukes for å sjekke. Jason lurer på om det er en måte å automatisere denne prosessen med å kopiere over "fotnote nummer", "setning fra artikkelen dokument" og "original fotnote innhold" fra manuskriptet kildedokumentet inn i regnearket dokumentet.
Hver av oppgavene nevnt av Jason kan gjøres programmatisk, med noen irriterende unntak. Det er ikke så vanskelig å gå gjennom fotnote og sluttnote samlinger, i VBA, og trekke ut informasjon fra dem. Denne informasjonen kan deretter bli flyttet til et nytt dokument som kan brukes som redaktørens arket. Den irriterende er at fotnote og EndNote tallene er dynamisk, og derfor ikke så lett å få tilgang. En full diskusjon om dette irriterende kan finnes på dette nettstedet:
http://www.vbaexpress.com/forum/showthread.php?31231
Nøyaktig hvordan du kan gå om å lage en makro for å gjøre informasjonsoverføring fra et dokument til et annet, avhenger i stor grad på egenskapene til infomraiton i forfatterens dokumentet. For eksempel, gjør forfatterens dokumentet omfatter ett eller to mellomrom etter en setning? Betyr det at flere fotnoter per setning? Betyr det at sluttnoter i tillegg til fotnoter? Omfatter det tabeller?
Poenget er at ther finnes en rekke hensyn som kan påvirke utviklingen av en makro. Dette betyr at eventuelle makroer må finjusteres til kilden dokumentet du arbeider med-som betyr masse testing. For å gi deg et utgangspunkt, men vurdere følgende makroer. De vil kopiere setninger, fotnoter og sluttnoter (hvis noen) fra et kildedokument til et nytt dokument.
Sub FootnotesEndnotes ()
Dim fNote Som Fotnote
Dim eNote Som Endnote
Dim Arange Som Range
Dim SSkrive As String
Dim rText As String
Dim Eref As String
Dim newDoc Som Document
Dim oldDoc Som Document
Satt oldDoc = ActiveDocument
Satt newDoc = Documents.Add
SSkrive = "--------------- FOTNOTER ---------------" & vbCr
newDoc.Content.InsertAfter SSkrive
oldDoc.Activate
For Hver fNote I ActiveDocument.Footnotes
Satt Arange = fNote.Reference
aRange.MoveStart enhet: = wdSentence, Count: = - 1
aRange.MoveEnd enhet: = wdSentence
SSkrive = aRange.Text
rText = fNote.Range.Text
Med 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
Avslutt med
Call WriteNewdoc (newDoc, SSkrive, rText, Eref, "Fotnote Text")
Neste fNote
SSkrive = "--------------- sluttnoter ----------------" & vbCr
newDoc.Content.InsertAfter vbCr & vbCr & SSkrive
For Hver eNote I ActiveDocument.Endnotes
Set Arange = eNote.Reference
aRange.MoveStart enhet: = wdSentence, Count: = - 1
aRange.MoveEnd enhet: = wdSentence
SSkrive = aRange.Text
rText = eNote.Range.Text
Med 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
Avslutt med
Call WriteNewdoc (newDoc, SSkrive, rText, Eref, "Endnote Text")
Neste eNote
newDoc.Activate
End Sub
Sub WriteNewdoc (newDoc Som dokument, SSkrive As String, rText As String, _
Eref As String, Astyle As String)
Dim sText1 As String
Dim sText2 As String
Dim Drange Som Range
Dim k Som Long
Dim curDoc Som Document
Satt curDoc = ActiveDocument
newDoc.Activate
k = InStr (SSkrive, Chr (2))
Hvis k = 1 Så SSkrive = Mid (SSkrive, 2) "i tilfelle forrige setning har note
SSkrive = Trim (SSkrive)
k = InStr (SSkrive, Chr (2))
Dersom k = 0 Deretter
SSkrive = SSkrive & Chr (2)
k = Len (SSkrive)
End If
Hvis k> 1 Deretter
sText1 = Left (SSkrive, k - 1)
Else
sText1 = ""
End If
Hvis k = Len (SSkrive) Deretter
sText2 = ""
Else
sText2 = Mid (SSkrive, k + 1)
End If
Hvis Len (sText2)> 0 Then
Hvis Mid (sText2, Len (sText2), 1) = Chr (13) Deretter
sText2 = Left (sText2, Len (sText2) - 1)
End If
End If
Satt Drange = newDoc.Content
dRange.Collapse Regi: = wdCollapseEnd
dRange.Select
Med markering
.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
Avslutt med
curDoc.Activate
End Sub
Dette er (igjen) bare et startpunkt. Du må teste og finjustere makroer med dokumentene for å sørge for at de gjør hva du forventer.
Hvis du er ute etter tilleggsressurser til hjelp i å utvikle en slik makro, kan du prøve denne boken. Det er en freebie, og det kan ha noen makroer (eller eksempler) som du kan tilpasse til dine spesifikke formål:
http://www.archivepub.co.uk/book.html
Ikke bli overrasket hvis din makro blir ganske komplisert over tid. Dette er å forvente når du oppretter en makro til å utføre oppgaver som mennesker kan gjøre med relativt lite tenkning.
WordTips er din kilde for kostnadseffektiv Microsoft Word trening. (Microsoft Word er den mest populære tekstbehandlingsprogrammet i verden.) Dette tipset (12724) gjelder for Microsoft Word 2007, 2010, og 2013.
- • Bruke manuell linjeskift med Justified Avsnitt
- • Slik behandler Prosesser med Theory of Constraints
- • Sette inn en pause med en Macro
- • Sette inn tekst med en Macro
- • Fylle tabellceller med en Macro
- • Opprette regneark med en Macro
- • Sette regnearkverdier med en Macro
- • Kopiere bilder med en Macro
- • Gjør kort prosess med menynavn