在word中选择粘贴的图片

Mar*_*tin 3 vba ms-word image

我正在尝试创建一个宏,将图像作为增强型图元文件复制到 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 有关?但我找不到一段代码实际上允许我选择刚刚粘贴的图片,以便之后调整大小。

为什么会这样?我该如何解决它?

Cin*_*ter 5

当您使用 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)