vba宏使所有形状和图片与文本内联

时间:2013-04-10 07:41:20

标签: vba ms-word word-vba

我想写一个宏,它将我的word文档中的所有形状和图片转换为内联文本。  我正在使用的代码将所有形状(由绘图工具编辑)转换为内嵌文本,但之前转换为图片的表格(由图片工具编辑)或任何其他图片不是文本包装它与文本内联。粘贴我正在使用的代码

For Each oShp In ActiveDocument.Shapes
   oShp.Select
   Selection.ShapeRange.WrapFormat.Type = wdWrapInline
Next oShp

4 个答案:

答案 0 :(得分:1)

第一个答案是一个良好的开端,但存在问题。 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

答案 1 :(得分:0)

给这个去吧

For Each oShp In ActiveDocument.Shapes
   oShp.Select
   Selection.ShapeRange.ConvertToInlineShape 
Next oShp

答案 2 :(得分:0)

我认为选择每个迭代的形状是不必要的,可能会阻碍。

任何仍需要答案的人,这对我有用:

For Count = 1 To 2
    For Each oShp In ActiveDocument.Shapes
        oShp.ConvertToInlineShape
    Next oShp
Next Count

外循环的第一次迭代处理图片,第二次迭代处理绘图对象。不要问为什么!

答案 3 :(得分:0)

对于 i = 1 到 ActiveDocument.Shapes.Count ActiveDocument.Shapes(1).ConvertToInlineShape '索引值为 1,因为每次转换时计数都会减少 下一个