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