【问题标题】:Select pasted image in word在word中选择粘贴的图像
【发布时间】:2019-03-06 06:01:30
【问题描述】:

我正在尝试创建一个宏,将图像作为增强型元文件复制到 word 中,并将其大小调整为特定宽度。

我在 Excel 中有一个类似的宏,如下所示:

Sub Macro1()

    ActiveSheet.PasteSpecial Format:="Picture (Enhanced Metafile)", Link:=False _
        , DisplayAsIcon:=False
    Selection.ShapeRange.Width = 255

End Sub

这只是简单地记录在 Excel 中,就像一个魅力。 但是,用 word 做同样的事情似乎是不可能的。

如果我不使用录制宏,我将只粘贴图片并使用 shift+向左箭头来选择图片。但是一旦我开始录制,这不起作用。 我环顾四周,显然它与内联形状有关?但是我找不到一段代码实际上允许我选择我刚刚粘贴的图片,以便我之后调整大小。

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

【问题讨论】:

    标签: vba image ms-word


    【解决方案1】:

    当您使用 VBA 在 Word 中粘贴时,不会选择粘贴的内容,显然这在 Excel 中有所不同。可能是因为 Shape 链接到工作簿单元格并且该单元格被选中?

    在任何情况下,以下代码都会成功提取粘贴的图像以进行进一步操作。它的作用是计算从文​​档开头到当前选择的 InlineShapes 的数量,再加上一个字符。

    在粘贴操作之后,新的 InlineShape 将添加到范围内的项目数中,因此可以通过其索引号 -(lNrIls + 1) 拾取它。

    为了完整起见,我还包括了粘贴为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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 2017-11-12
      • 2010-11-10
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多