Найти заменить несколько макросов в Word - PullRequest
1 голос
/ 23 сентября 2019

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

Все, что я пробовал, не удалось, либо не нашел текст в комментариях, либо не работал после того, как я скопировал / вставил записанный код для поиска / замены одного имени и скорректировал остальные 20-30 имен.Я пробовал, вероятно, 4 разных кода поиска / замены, которые работают для основного текста, но ни один из них не работал для комментариев.

Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "Employee Name 1"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "Employee Name 2"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll

Не удается скопировать / вставить это через всех 20-30 сотрудников (без ошибок,просто не заменит).Я уверен, что в любом случае есть более элегантный способ сделать это, но я определенно недостаточно знаком с кодом.

1 Ответ

0 голосов
/ 23 сентября 2019

Это не на 100% ясно из формулировки вопроса, требуется ли также код для удаления автора и инициалов комментариев, или просто текст в комментариях, который относится к именам сотрудников.Таким образом, приведенный ниже код выполняет оба действия.

Сначала объявляется массив , который заполняется именами сотрудников, которые должны быть удалены.Это упростит управление списком и сократит объем кода (не нужно копировать / вставлять для каждого сотрудника).

Затем сбор комментариев зацикливается и выполняются два теста.

  • Содержит ли комментарий текст имя любого сотрудника .Чтобы определить это, массив имен сотрудников зацикливается и проверяется наличие имени с помощью Instr.Если имя присутствует, Find / Replace запускается на Comment.Range.(Примечание: этот код содержит только базовые свойства Find, вам может понадобиться добавить некоторые вещи, если требуется больше.)
  • Удалить Author и Initial information .Здесь список имен авторов является частью теста Case.Если комментарий содержит один из них, информация Author и Initial устанавливается в пустую строку.

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

Sub RemoveAuthorFromAllComments() ' TestLoopCommentWords()
    Dim C As Word.Comment, rng As Word.Range
    Dim employees() As Variant, e As Variant

    employees = Array("Cindy Meister", "John Doe", "Mary Jane")

    For Each C In ActiveDocument.Comments
        Set rng = C.Range
        For Each e In employees
            If InStr(rng, e) <> 0 Then
                With rng.Find
                    .Text = e
                    .Replacement.Text = ""
                    .Execute Replace:=wdReplaceAll
                End With
            End If
        Next
        Select Case C.Author
            Case "Cindy Meister", "John Doe", "Mary Jane"
                C.Author = ""
                C.Initial = ""
            Case Else
                Debug.Print C.Author
        End Select
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...