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.