首页 > 解决方案 > 如何在 LINK 字段中调整图形对象的大小?

问题描述

在将一系列单元格从 Excel 粘贴到 Word (2013) 后,该字段如下所示:

{ LINK Excel.SheetMacroEnabled.12 D:\\20181228\\SC.xlsm Sheet1!R10C1:R10C20" \a \p }

如果使用右键单击对象,选择“设置对象格式”,然后单击“?”,将打开“设置自选图形格式”参考文章。

但是,ActiveDocument.Shapes.SelectAll不检测此对象。

此代码也不起作用,尽管错误消息说此组件可用于图片和 OLE 对象:

With ActiveDocument.Shapes(1).PictureFormat 
 .ColorType = msoPictureGrayScale 
 .CropBottom = 18 
End With

这个对象是什么?我在对象模型(Word)中找不到它。

如何通过 VBA 访问它?我想以编程方式将一组此类对象的大小调整为原始对象的 90%。

更新。@Cindy Meister 建议在哪里挖掘,谢谢。我写了代码,它似乎工作正常:

Sub ResizeImages()
Dim img As Long
With ActiveDocument
For img = 1 To .InlineShapes.Count
    With .InlineShapes(img)
        .ScaleHeight = 90
        .ScaleWidth = 90
    End With
Next img
End With
End Sub

标签: excelms-wordword-field

解决方案


链接字段必须是 InlineShape - 它不能是Shape,如果您可以使用 Alt+F9 显示该字段,则不能。由于Shape对象具有文本换行格式,因此无法访问与它们关联的任何域代码(通常没有)。

因此,通过字段显示的任何对象Link都应该可以通过 InlineShape对象模型获得。

例如,以下代码循环文档中的字段,如果它们是与 Excel 源链接的字段并包含 InlineShape,则 InlineShape 的尺寸会被缩放:

Dim fld as Word.Field
For Each fld In ActiveDocument.Fields
    If fld.Type = wdFieldLink
      If fld.Result.InlineShapes.Count > 1 And _
         InStr(fld.OLEFormat.ClassType, "Excel") Then
           Set ils = fld.Result.InlineShapes(1)
           ils.ScaleWidth = 90
           ils.ScaleHeight = 90
      End If
    End If
Next

推荐阅读