我正在尝试创建一个宏,将图像作为增强型图元文件复制到 word 中,并将其大小调整为特定宽度。
我在 Excel 中有一个类似的宏,如下所示:
Sub Macro1()
ActiveSheet.PasteSpecial Format:="Picture (Enhanced Metafile)", Link:=False _
, DisplayAsIcon:=False
Selection.ShapeRange.Width = 255
End Sub
Run Code Online (Sandbox Code Playgroud)
这只是简单地记录在 Excel 中,并且非常有效。然而,在言语中似乎不可能做同样的事情。
如果我不使用录制宏,我将仅粘贴图片并按 Shift + 向左箭头选择图片。但一旦我开始录制,这就不起作用了。我环顾四周,显然它与 Inlineshapes 有关?但我找不到一段代码实际上允许我选择刚刚粘贴的图片,以便之后调整大小。
为什么会这样?我该如何解决它?
当您使用 VBA 在 Word 中粘贴时,不会选择粘贴的内容,显然这在 Excel 中有所不同。也许是因为形状链接到工作簿单元格并且单元格被选中?
无论如何,以下代码成功地拾取粘贴的图像以进行进一步操作。它的作用是计算从文档开头到当前选择的 InlineShapes 数量,再加上一个字符。
粘贴操作后,新的 InlineShape 将被添加到范围内的项目数中,因此可以通过其索引号 - 来选取它(lNrIls + 1)。
为了完整起见,我还包含了粘贴为 a 的变体Shape(这意味着图像具有文本换行格式等)。基本方法与 InlineShape 相同。
注意:默认情况下,粘贴图像时,Word 将使用“Insert/paste pictures as文件/选项/高级”的“剪切、复制和粘贴”部分中的设置。因此,在某些机器上,图像可能会粘贴为 InlineShape,而在其他机器上可能会粘贴为 Shape。如果要专门内联粘贴或使用文本换行粘贴,请使用或 的PasteSpecial相应WdOLEPlacement枚举值。wdFloatOverTextwdInLine
Sub PasteAndSelectPicture()
Dim ils As Word.InlineShape
Dim shp As Word.Shape
Dim lNrIls As Long
Dim lNrShp 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
'Get an InlineShape
lNrIls = rngDoc.InlineShapes.Count
rngSel.Paste
Debug.Print rngDoc.InlineShapes.Count, lNrIls
Set ils = rngDoc.InlineShapes(lNrIls + 1)
ils.width = 255
'Get a pasted Shape
' lNrShp = rngDoc.ShapeRange.Count
' rngSel.PasteAndFormat Type:=wdFormatOriginalFormatting
' Debug.Print lNrShp, rngDoc.ShapeRange.Count
' Set shp = rngDoc.ShapeRange(rngDoc.ShapeRange.Count)
' shp.RelativeHorizontalPosition = wdRelativeHorizontalPositionCharacter
' shp.RelativeVerticalPosition = wdRelativeVerticalPositionLine
' shp.Left = 10
' shp.Top = 10
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2313 次 |
| 最近记录: |