Ошибка выполнения VBA 5941 Поиск пустых полей - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь написать макрос, чтобы найти и пометить все пустые поля DOCPROPERTY в указанном фрагменте текста.Когда я пытаюсь запустить макрос, он помечает некоторые обязательные поля текстом, но не другие.Затем макрос завершается ошибкой с ошибкой 5941 во время выполнения. У меня есть ощущение, что он как-то связан с тем, как цикл подсчитывает и циклически пропускает пустые поля, но я не смог идентифицировать исправление в ходе какого-либо исследования.У кого-нибудь есть мысли?

 Sub RemoveFieldCodes()

'Moves to start of doc and selects text block
    Selection.HomeKey Unit:=wdStory
    Selection.HomeKey Unit:=wdStory
    Selection.MoveDown Unit:=wdLine, Count:=2
    Selection.MoveDown Unit:=wdParagraph, Count:=6, Extend:=wdExtend

'Finds blank fields and appends text to end
Dim i As Long
 With Selection 
     For i = Selection.Fields.Count To 1 Step -1
     If .Fields(i).Type = wdFieldDocProperty And .Result = "" Then 
            .Fields(i).Select
            Selection.EndKey Unit:=wdLine
            Selection.TypeText Text:="BLANK"
            End If
         Next i
     End With

1 Ответ

0 голосов
/ 12 октября 2018

Вы должны работать в обратном направлении через коллекцию;в противном случае последовательные пропуски могут быть пропущены.Попробуйте:

Sub Demo()
Application.ScreenUpdating = False
Dim i As Long, Rng As Range
With ActiveDocument
  For i = .Fields.Count To 1 Step -1
    With .Fields(i)
      If .Type = wdFieldDocProperty Then
        If .Result = " " Then
          Set Rng = .Result
          .Delete
          Rng.Text = "BLANK"
        End If
      End If
    End With
  Next
End With
Application.ScreenUpdating = True
End Sub

Непонятно, почему вы используете 'Selection.EndKey Unit: = wdLine', поэтому, если:

          Rng.Text = "BLANK"

недостаточно, попробуйте заменить его на:

          With Rng
            .End = .Paragraphs(1).Range.End - 1
            .Text = "BLANK"
          End With
...