1

Тема: Автоматическая нумирация рисунков

Как-то очень странно работает макрос: Нормально отрабатывает только на нечетном количестве рисунков, притом в 2 прохода. На четном количестве белиберду выдает. В режиме дебагера показывает выполнения нужных команд, но изменения в документ не вносятся.

Макрос

Sub try()
'
' try Макрос
'
'  
    
    For i = 0 To 100 Step 1
   
   Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        
        .Text = "^g"
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute
        
         If .Found = True Then
    
        Selection.Find.Execute
    Selection.InsertCaption Label:="Рис.", TitleAutoText:="InsertCaption3", _
        Title:="", Position:=wdCaptionPositionBelow, ExcludeLabel:=0
    Selection.MoveLeft Unit:=wdWord, Count:=1
    Selection.Style = ActiveDocument.Styles("Цитата 2")
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:=". "
         
       i = i + 1
    
        
    Else
    
    Exit For
    
    End If
        
      
        
    End With
    
        
    Next
    
End Sub

2

Re: Автоматическая нумирация рисунков

1. В начале макроса перед циклом FOR вставьте строку:

CaptionLabels.Add Name:="Рис."

2. Удалите внутри цикла FOR следующую строку:

 i = i + 1

В букварях по программированию не рекомендуют изменять значение счетчика цикла в теле цикла FOR, т.к. это может привести к непредсказуемым результатам.
С предложенными изменениями макрос нормально отработал на тестовых примерах с 2, 3, 4 и 5 рисунками Ворд.

3

Re: Автоматическая нумирация рисунков

К сожалению, ваше решение не помогло, причина, наверное, в чем-то еще.
Запустив выполнения макроса по шагам я выявил, что почему-то при переходе на строчку

Selection.InsertCaption Label:="Рис.", TitleAutoText:="InsertCaption3", _
        Title:="", Position:=wdCaptionPositionBelow, ExcludeLabel:=0

происходит самопроизвольный переход к следующему рисунку  sad
таким образом нумеруются четные рисунки.

Если количество рисунков не четное, то при повторном проходе, подобный прыжок происходит с точностью наоборот, т.е. четные рисунки, которые уже были пронумерованы почему-то пропускаются.

Если количество рисунков четное, то поведение повторяется, и четные рисунки нумеруются дважды, а нечетные пропускаются.

использую word 2010.