使用宏将 Ms word 中的所有形状转换为图像

YFe*_*izi 2 vba ms-word ms-office

我编写这个宏来将文档中的所有形状转换为图像:

Sub AllShapeToPic()    
   For Each oShp In ActiveDocument.Shapes
    oShp.Select
    Selection.Cut
    Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
        Placement:=wdInLine, DisplayAsIcon:=False
   Next oShp

End Sub
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,没有任何形状转换为图像。
我的宏代码有什么问题?

Loc*_*eer 5

欢迎来到操纵您正在循环浏览的收藏的奇妙世界。切割的那一刻,您实际上是从集合中删除了形状,从而改变了循环。

如果您想遍历形状(或表格行或其他任何内容)并从该集合中删除某些内容,只需向后退:

Dim i As Integer, oShp As Shape

For i = ActiveDocument.Shapes.Count To 1 Step -1
    Set oShp = ActiveDocument.Shapes(i)
    oShp.Select
    Selection.Cut
    Selection.PasteSpecial Link:=False, dataType:=wdPasteEnhancedMetafile, _
        Placement:=wdInLine, DisplayAsIcon:=False
Next i
Run Code Online (Sandbox Code Playgroud)

表的替代方案(警告:未经测试!)

Dim tbl As Table

For i = ActiveDocument.Tables.Count To 1 Step -1
    Set tbl = ActiveDocument.Tables(i)
    tbl.Select
    Selection.Cut
    Selection.PasteSpecial Link:=False, dataType:=wdPasteEnhancedMetafile, _
        Placement:=wdInLine, DisplayAsIcon:=False
Next i
Run Code Online (Sandbox Code Playgroud)

对于方程:方程是 InlineShapes 并具有“OMath”属性。用它来识别方程对象。警告:未经测试

Dim equation As InlineShape

For i = ActiveDocument.InlineShapes.Count To 1 Step -1
    Set equation = ActiveDocument.InlineShapes(i)
    If equation.OMath > 0 Then
        equation.Select
        Selection.Cut
        Selection.PasteSpecial Link:=False, dataType:=wdPasteEnhancedMetafile, _
            Placement:=wdInLine, DisplayAsIcon:=False
    End If
Next i
Run Code Online (Sandbox Code Playgroud)