用于设置图片布局和大小的Word宏

时间:2018-11-29 13:33:07

标签: vba ms-word

我正在尝试记录一个宏,该宏会将粘贴的图像的大小设置为6.5 x 4 cms,并且图像布局在“文字前面”。我通常通过右键单击图像并设置图片属性来进行设置,但是在录制宏时不可用。使用Shift-F10确实会弹出菜单,但是用于设置图像布局属性的选项显示为灰色。

请帮助!

谢谢

1 个答案:

答案 0 :(得分:1)

是的,这对于宏记录器很有趣...

如果将来需要执行类似的操作,它将帮助您了解具有任何“文本环绕”格式(即“浮动”)格式的对象是Shape。行为类似于字符的对象是InlineShape。您可以使用ConvertToInlineShape / ConvertToShape在两者之间进行转换。对于这种性质的未来事物,应该为您提供一个起点:-)

下面的代码示例使用ConvertToShape,以便可以应用自动换行格式。 (转换是您不必在UI中执行的额外步骤-Word会为您完成。)

在这种情况发生之前,代码会更改大小,但是也可以反过来更改Shape对象上的大小。

代码中还发生了什么:内联粘贴图片时,未选中该图片。因此,这段代码可以计算出文档中多达多少张图片(InlineShapes)。粘贴后,代码将提取到该点的现有图片数量加一,以获取刚刚粘贴的图片。

代码使用CentimetersToPoints将所需的厘米数转换为Points度量值,因为这是Word用于调整图形对象(以及许多其他东西)大小的方法。

我怎么知道如何使用wdWrapFront:键入shp.WrapFormat.Type =时,VBA编辑器将自动显示用于文本换行格式的有效条目列表。同样,键入shp.时,将显示Shape的有效属性的列表,依此类推。 (这称为IntelliSense,它是非常有用的帮助!)

Sub PasteAndSelectPicture()
    Dim ils As Word.InlineShape
    Dim shp As Word.Shape
    Dim lNrIls As Long
    Dim rngDoc As Word.Range
    Dim rngSel As Word.Range

    Set rngDoc = ActiveDocument.content
    Set rngSel = Selection.Range
    rngDoc.End = rngSel.End + 1

    lNrIls = rngDoc.InlineShapes.Count
    rngSel.Paste
    ' Debug.Print rngDoc.InlineShapes.Count, lNrIls
    Set ils = rngDoc.InlineShapes(lNrIls + 1)
    ils.width = CentimetersToPoints(6.5)
    ils.height = CentimetersToPoints(4)
    Set shp = ils.ConvertToShape
    shp.WrapFormat.Type = wdWrapFront
End SUb