Макрос для преобразования заметок из текста в сноски в MS Word - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь найти способ конвертировать примечания в виде текста (примечания и ссылки в текстовом теле) в примечания в документе MS Word, в котором есть существующие примечания, и это мой первый макрос за последние десятилетия. Мои примечания к тексту могут быть идентифицированы, потому что они заключены в темно-синие между свернутыми скобками. До сих пор мне удалось записать макрос для отдельных шагов: поиск шаблона, вырезать шаблон, вставить концевую сноску, вставить шаблон, снова найти шаблон в концевых сносках, убрать скрученные скобки, сфокусироваться на начале документа (из концевых сносок).

Вот как это выглядит:

Sub inline2endnote()
Selection.Find.ClearFormatting
Selection.Find.Font.Color = 6299648
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "\{(*?)\}"
    .Replacement.Text = "\1"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
End With
Selection.Find.Execute
Selection.Cut
With Selection
    With .EndnoteOptions
        .Location = wdEndOfDocument
        .NumberingRule = wdRestartContinuous
        .StartingNumber = 1
        .NumberStyle = wdNoteNumberStyleArabic
    End With
    .Endnotes.Add Range:=Selection.Range, Reference:=""
End With
Selection.PasteAndFormat (wdFormatOriginalFormatting)
Selection.Find.ClearFormatting
Selection.Find.Font.Color = 6299648
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "\{(*?)\}"
    .Replacement.Text = "\1"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
End With
Selection.Find.Execute
With Selection
    If .Find.Forward = True Then
        .Collapse Direction:=wdCollapseStart
    Else
        .Collapse Direction:=wdCollapseEnd
    End If
    .Find.Execute Replace:=wdReplaceOne
    If .Find.Forward = True Then
        .Collapse Direction:=wdCollapseEnd
    Else
        .Collapse Direction:=wdCollapseStart
    End If
    .Find.Execute
End With
Selection.HomeKey Unit:=wdStory
End Sub

Мне пришлось сосредоточиться на вершине, потому что мне нужно было выйти из секции сносок и go вернуться к основному тексту. Кроме того, я понятия не имею, для чего предназначен последний раздел «С». Теперь я хотел бы l oop этот шаблон для того, чтобы исправить все встроенные заметки, но я, кажется, не могу найти прочь. Я использовал этот поток в качестве ссылки, но я не могу понять, как правильно установить область и определить поля для моих итераций. Мне также было интересно, есть ли более чистый способ написания шагов, например, вставка моего контента без закрученных скобок, например, сохранение моей находки в переменной и использование второго с удаленным содержимым.

1 Ответ

0 голосов
/ 19 марта 2020

Попробуйте:

Sub Demo()
Application.ScreenUpdating = False
Dim Rng As Range, E_Nt As Endnote
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "\{[!\{]@\}"
    .Font.Color = 6299648
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = True
    .MatchWildcards = True
    .Execute
  End With
  Do While .Find.Found
    Set Rng = .Duplicate
    With Rng
      .Start = .Start + 1
      .End = .End - 1
    End With
    Set E_Nt = .Endnotes.Add(.Duplicate)
    E_Nt.Range.FormattedText = Rng.FormattedText
    E_Nt.Range.Font.ColorIndex = wdAuto
    .Text = vbNullString
    .Collapse wdCollapseEnd
    .Find.Execute
  Loop
End With
Application.ScreenUpdating = True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...