Джейсон — студент-редактор академического юридического журнала. В процессе публикации ему необходимо проверять каждое предложение на предмет плагиата и точности, а также каждую цитату, чтобы обеспечить правильное форматирование и поддержку.

Это в основном означает, что каждое предложение должно сопровождаться цитатой, помещенной в сноску. В настоящее время сотрудники вручную копируют и вставляют каждое текстовое предложение, сноску и номер сноски из рукописи автора (документ Word) в документ Word штатного редактора, который затем используется для проверки. Джейсон задается вопросом, есть ли способ автоматизировать этот процесс копирования «номера сноски», «предложения из документа статьи» и «исходного содержания сноски» из исходного документа рукописи в рабочий лист.

Каждую из задач, упомянутых Джейсоном, можно выполнить программно, за некоторыми раздражающими исключениями. Не так сложно пройтись по коллекциям сносок и концевых сносок в VBA и извлечь из них информацию. Затем эту информацию можно переместить в новый документ, который можно использовать в качестве рабочего листа редактора. Раздражает то, что номера сносок и концевых сносок являются динамическими, и поэтому к ним не так легко получить доступ.

Полное обсуждение этого раздражителя можно найти на этом сайте:

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

То, как именно вы можете сделать макрос для передачи информации из одного документа в другой, в значительной степени зависит от характеристик информации в авторском документе. Например, есть ли в авторском документе один или два пробела после предложения? Можно ли делать несколько сносок в предложении? Допускаются ли примечания в дополнение к сноскам? Включает ли он таблицы?

Дело в том, что существует множество факторов, которые могут повлиять на разработку макроса. Это означает, что любые макросы необходимо будет точно настроить в соответствии с исходным документом, с которым вы работаете, а это значит, что потребуется много тестирования. Однако, чтобы дать вам отправную точку, рассмотрите следующие макросы. Они будут копировать предложения, сноски и концевые сноски (если есть) из исходного документа в новый документ.

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

Это (опять же) только отправная точка. Вам нужно будет протестировать и настроить макросы с вашими документами, чтобы убедиться, что они делают то, что вы ожидаете.

Если вы ищете дополнительные ресурсы для разработки такого макроса, вы можете попробовать эту книгу. Это халява, и в ней могут быть макросы (или примеры), которые вы можете адаптировать для своих конкретных целей:

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

Не удивляйтесь, если ваш макрос со временем станет довольно сложным. Этого следует ожидать каждый раз, когда вы создаете макрос для выполнения задач, которые люди могут выполнять с относительно небольшим мышлением.

_Примечание: _

Если вы хотите знать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах WordTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

WordTips — ваш источник экономичного обучения работе с Microsoft Word.

(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (12724) относится к Microsoft Word 2007, 2010, 2013, 2016, 2019 и Word в Office 365.