最初の答えは良いスタートでしたが、問題があります。For Each はコレクションを反復処理しますが、コレクションは ConvertToInlineShape によって変更されます。他の言語では、コレクションが変更されたという例外がスローされますが、ここではサイレントに停止します。
これを回避するには、各シェイプを別のコレクションに追加して、そこで反復する必要があります。または、以下のサンプルの場合は、インデックスを手動で追跡します。
Sub InlineAllImages()
Dim Shape As Shape
Dim Index As Integer: Index = 1
' Store the count as it will change each time.
Dim NumberOfShapes As Integer: NumberOfShapes = Shapes.Count
' Break out if either all shapes have been checked or there are none left.
Do While Shapes.Count > 0 And Index < NumberOfShapes + 1
With Shapes(Index)
If .Type = msoPicture Then
' If the shape is a picture convert it to inline.
' It will be removed from the collection so don't increment the Index.
.ConvertToInlineShape
Else
' The shape is not a picture so increment the index (move to next shape).
Index = Index + 1
End If
End With
Loop
End Sub