Объектная модель Word на самом деле не была разработана с учетом этого.Это может быть сделано, но будет довольно медленно.Работа с базовым Word Open XML сделает это лучше и, вероятно, будет намного быстрее.Однако ...
Одной из возможностей является зацикливание символов и проверка Range.InlineShapes.Count
.Если символом является InlineShape
, то число будет больше 0 (оно должно быть одним):
Sub IsCharacterImage()
Dim c As Word.Range
For Each c In Selection.Characters
If c.InlineShapes.Count > 0 Then
Debug.Print "Is an image"
Else
Debug.Print "Is not an image"
End If
Next
End Sub
Другой, хотя и не очень надежный подход, будет получить Start
или * 1009.* свойство объектов в циклах показано в вопросе и сравните их, чтобы определить, в каком порядке отображается содержимое.
Проблема этого подхода заключается в том, что если в Range есть скрытые символы, коды полей илиВ других невидимых «контрольных символах» в тексте эти значения могут быть неточными.В общем, я бы склонялся к первому подходу ...
Sub StartCharImage()
Dim pParagraph As Word.Paragraph, lcharacter As Word.Range
Dim linlineshape As Word.InlineShape
Dim sCharStart As String, sImgStart As String
Dim aCharStart As Variant, aImgStart As Variant
Set pParagraph = ActiveDocument.paragraphs(1)
For Each lcharacter In pParagraph.Range.Characters
sCharStart = sCharStart & lcharacter.Start & ","
Next
sCharStart = Left(sCharStart, Len(sCharStart) - 1)
Debug.Print sCharStart
aCharStart = Split(sCharStart, ",")
For Each linlineshape In pParagraph.Range.InlineShapes
sImgStart = sImgStart & linlineshape.Range.Start & ","
Next
sImgStart = Left(sImgStart, Len(sImgStart) - 1)
Debug.Print sImgStart
aImgStart = Split(sImgStart, ",")
End Sub