Automatización de un proceso manual con una macro (Microsoft Word)
Jason es un estudiante editor de una revista de derecho académico. Como parte del proceso de publicación, debe verificar cada oración en busca de plagio y precisión y cada cita para garantizar un formato y soporte adecuados.
Esto básicamente significa que cada oración debe estar respaldada por una cita colocada en una nota al pie. Actualmente, el personal copia y pega manualmente cada oración de texto, nota al pie y número de nota al pie del manuscrito del autor (un documento de Word) en un documento de Word del editor del personal que luego se usa para verificar. Jason se pregunta si hay una manera de automatizar este proceso de copiar el «número de nota al pie», la «oración del documento del artículo» y el «contenido de la nota al pie original» del documento original del manuscrito al documento de la hoja de trabajo.
Cada una de las tareas mencionadas por Jason se puede realizar mediante programación, con algunas irritantes excepciones. No es tan difícil recorrer las colecciones de notas al pie y notas al final, en VBA, y extraer información de ellas. Esta información se puede mover luego a un nuevo documento que podría usarse como hoja de trabajo del editor. La parte irritante es que los números de las notas al pie y las notas al final son dinámicos y, por lo tanto, no son tan fáciles de acceder.
Se puede encontrar una discusión completa de este irritante en este sitio:
http://www.vbaexpress.com/forum/showthread.php?31231
Exactamente cómo se podría hacer una macro para hacer la transferencia de información de un documento a otro depende, en gran parte, de las características de la información en el documento del autor. Por ejemplo, ¿el documento del autor incluye uno o dos espacios después de una oración? ¿Permite múltiples notas a pie de página por oración? ¿Permite notas al final además de notas al pie? ¿Incluye tablas?
El punto es que hay una serie de consideraciones que pueden afectar el desarrollo de una macro. Esto significa que cualquier macros deberá ajustarse con precisión al documento de origen con el que está trabajando, lo que significa muchas pruebas. Sin embargo, para darle un punto de partida, considere las siguientes macros. Copiarán oraciones, notas al pie de página y notas al final (si las hay) de un documento fuente a un documento nuevo.
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
Esto es (nuevamente) solo un punto de partida. Deberá probar y ajustar las macros con sus documentos para asegurarse de que hagan lo que espera.
Si está buscando recursos adicionales que le ayuden a desarrollar una macro de este tipo, puede probar este libro. Es un regalo de promoción y puede tener algunas macros (o ejemplos) que puede adaptar a sus propósitos específicos:
http://www.archivepub.co.uk/book.html
No se sorprenda si su macro se vuelve bastante compleja con el tiempo. Esto es de esperar siempre que cree una macro para realizar tareas que los humanos pueden hacer con relativamente poco pensamiento.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios WordTips), he preparado una página especial que incluye información útil.
link: / wordribbon-WordTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
WordTips es su fuente de formación rentable en Microsoft Word.
(Microsoft Word es el software de procesamiento de texto más popular del mundo). Este consejo (12724) se aplica a Microsoft Word 2007, 2010, 2013, 2016, 2019 y Word en Office 365.