Автоматизация ручного процесса с помощью макроса (Microsoft Word)
Джейсон — студент-редактор академического юридического журнала. В процессе публикации ему необходимо проверять каждое предложение на предмет плагиата и точности, а также каждую цитату, чтобы обеспечить правильное форматирование и поддержку.
Это в основном означает, что каждое предложение должно сопровождаться цитатой, помещенной в сноску. В настоящее время сотрудники вручную копируют и вставляют каждое текстовое предложение, сноску и номер сноски из рукописи автора (документ 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.