从Excel到Word选择一个VBA粘贴形状,这样我就可以将文本紧紧地包裹起来

时间:2018-07-27 17:58:29

标签: excel vba excel-vba ms-word word-vba

我正在开发电子表格以自动生成报价;这涉及从具有我们可能的图表库的工作表中复制正确的图表(成组的Excel形状),并将该图像粘贴/插入/ [最有效的方法]粘贴到VBA组装的Word文档中。

到目前为止,我已经能够成功地识别,复制和粘贴从Excel到Word的特殊正确图表形状。但是,我发现的每一种技术都意味着形状要么将文本包装为内联或向内包装,而我又需要将文本的下一部分直接放在图表旁边,即“ wdTight”

下面,您可以看到我如何粘贴到当前形状中。但是我不知道如何将形状做成“ .wrapFormat.Type = wdTight”

通常会遇到一系列运行时438错误:对象不支持此属性或方法。

我有一个理论,这是因为Word认为选择始终是闪烁的文本光标,而不是被激活并具有悬浮布局选项工具提示的粘贴形状(但这只是一个理论)。

这是代码。请帮忙。

Sub export_excel_to_word()
Dim appWord
Dim quoteWord
Dim wordSelection

Set appWord = CreateObject("Word.Application")
    appWord.Visible = True
Set quoteWord = appWord.Documents.Add
Set wordSelection = appWord.Selection

'This part works
Module1.ImagesRefresh

   'Product 1 image insertion
    Sheets("Quick Lookup").Shapes("QuoteProduct1Image").Copy
    wordSelection.PasteSpecial Link:=False, _
      DataType:=wdPasteShape, _
      Placement:=wdInLine, _
      DisplayAsIcon:=False

'This part does not work and is where I need help
    With wordSelection
     .WrapFormat.Type = wdWrapFront
    End With

1 个答案:

答案 0 :(得分:1)

尝试创建一个变量来表示新粘贴的形状,它应该可以通过索引访问,并且应该是最后一个索引:

   'Product 1 image insertion
    ActiveSheet.Shapes(1).Copy
    wordSelection.PasteSpecial Link:=False, _
      DataType:=wdPasteShape, _
      Placement:=wdInLine, _
      DisplayAsIcon:=False

    Dim wdShape As Word.Shape
    Set wdShape = quoteWord.Shapes(quoteWord.Shapes.Count)

    wdShape.WrapFormat.Type = wdWrapTight

在不使用shape变量的情况下,这也可能有效,但是我没有针对具有多个形状的文档进行过测试(假设您要按顺序/迭代添加形状)

   'Product 1 image insertion
    ActiveSheet.Shapes(1).Copy
    wordSelection.PasteSpecial Link:=False, _
      DataType:=wdPasteShape, _
      Placement:=wdInLine, _
      DisplayAsIcon:=False

    wordSelection.ShapeRange(1).WrapFormat.Type = wdWrapTight

如果您还 插入文本(例如,通过TypeText的{​​{1}}方法,请尝试下面的代码。我对Word不太熟悉自动化,以及您hould avoid activate/select认为的规则在Word中不太严格(或有更多例外),但根据经验,我仍然会尽量避免依赖Word.Range对象,并改为使用范围。

我在这里所做的是粘贴到Selection而不是wordSelection.Range本身。那我就

Selection

enter image description here