View Single Post
 
Old 06-27-2024, 05:45 PM
Guessed's Avatar
Guessed Guessed is offline Windows 10 Office 2016
Expert
 
Join Date: Mar 2010
Location: Canberra/Melbourne Australia
Posts: 4,166
Guessed has a brilliant futureGuessed has a brilliant futureGuessed has a brilliant futureGuessed has a brilliant futureGuessed has a brilliant futureGuessed has a brilliant futureGuessed has a brilliant futureGuessed has a brilliant futureGuessed has a brilliant futureGuessed has a brilliant futureGuessed has a brilliant future
Default

You haven't indicated whether you are expecting the seq field to be on the Next paragraph or the Next.Next paragraph when your code runs into the style separator. You will have to do some testing to debug the code and deal with situations like that. Try this variation and step through the code to see what is being tested for the presence of the Seq field. The Select statements don't need to be in the code but they help you see what the macro is working on.
Code:
Sub CheckAllFigures()
  Dim iShape As InlineShape, myBigRange As Range, rngCaption As Range
  
  Application.ScreenUpdating = False
  
  On Error GoTo ErrorHandler
  Set myBigRange = ActiveDocument.Range
  For Each iShape In myBigRange.InlineShapes  'Process figures within the entire document
    'Look at para below the figure. Caption there? If not, add one.
    Set rngCaption = iShape.Range.Paragraphs(1).Next.Range
    rngCaption.Select     'this will help you debug the range being considered for the presence of the caption
    If rngCaption.Fields.Count = 0 Then
      If rngCaption.Characters.Last.Font.Hidden = True Then  'has a style separator
        Set rngCaption = rngCaption.Paragraphs.Last.Next.Range
        rngCaption.Select
        Debug.Print "What now"
      Else
        iShape.Range.InsertCaption Label:="Figure", Title:=". ", Position:=wdCaptionPositionBelow, ExcludeLabel:=False
      End If
    ElseIf rngCaption.Fields(1).Type <> wdFieldSequence Then
      iShape.Range.InsertCaption Label:="Figure", Title:=". ", Position:=wdCaptionPositionBelow, ExcludeLabel:=False
    End If
  Next iShape  'Go to next shape
  
  Set rngCaption = Nothing
  Set myBigRange = Nothing
  Application.ScreenUpdating = True
  Application.ScreenRefresh
  MsgBox "Done!", vbInformation
  
  Exit Sub 'If you get this far - avoid the error handler
ErrorHandler:
  MsgBox "Error: " & Err.Number & vbCr & Err.Description
End Sub
__________________
Andrew Lockton
Chrysalis Design, Melbourne Australia
Reply With Quote