如何使用VB6在Word文档中插入非嵌入式图片?

时间:2018-07-20 22:34:44

标签: ms-word vb6

我正在尝试使用VB ^附带的Microsoft word 15.0对象库将图像插入Word文档中,而我看到的插入图形文件的唯一方法是通过此方法:

oDoc.Range.InlineShapes.AddPicture ("C:\Users\name\Desktop\file.jpg")

但是,我想要一张可以放在文本上方以及在文档中想要的位置的图片...是否可以使用VB6代码来做到这一点?

2 个答案:

答案 0 :(得分:1)

Word有两种不同的方式来管理图像和其他嵌入式对象:InlineShapesShapes。第一个与文本流中的字符相同;后者具有自动换行的构图功能,并且与文本位于不同的层中。

要将图形文件作为Shape插入:

Dim shp as Word.Shape
Set shp = oDoc.Shapes.AddPicture(FileName, LinkToFile, _
          SaveWithDocument, Left, Top, Width, Height, Anchor)

AddPicture方法返回一个Shape对象。通常,在插入对象后需要设置其他属性时,这很有用。例如为了指定文本换行格式。如果不需要Shape对象,则可以插入Shape而无需分配给对象。在这种情况下,请省略括号:

oDoc.Shapes.AddPicture FileName, LinkToFile, _
          SaveWithDocument, Left, Top, Width, Height, Anchor

虽然只需要FileName参数,但是如果要控制插入图像时放置图像的位置 ,则最后一个参数Anchor非常重要。

还可以插入InlineShape然后使用ConvertToShape来获得Shape对象,可以将文本换行格式应用到该对象。

每个Shape 必须与文档中的范围相关联。除非另有说明,否则这将是当前选择所在段落的第一个字符。出于这个原因,我强烈建议您将Range参数中的Shapes.AddPicture传递给Anchor方法中的方法。

请注意,一旦插入Shape,就无法直接更改anchor的位置。可以使用剪切和粘贴来完成。另一种可能性是使用ConvertToInlineShape方法,以便您可以使用Range移动图形,然后使用ConvertToShape将其转换回Shape,但是在这种情况下在这种情况下,可能需要重设许多定位和包装属性。下面是使用“转换”方法的示例:

Sub MoveShapeToOtherRange()
    Dim oDoc As Word.Document
    Dim shp As Word.Shape
    Dim ils As Word.InlineShape
    Dim rngEnd As Word.Range, rngStart As Word.Range

    Set oDoc = ActiveDocument
    Set rngStart = oDoc.content
    rngStart.Collapse wdCollapseStart 'start of document
    Set rngEnd = Selection.Range

    Set shp = oDoc.shapes.AddPicture(fileName:="C:\Test\icons\Addin_Icon16x16.png", _
              Top:=0, Left:=10, anchor:=rngStart)

    Set ils = shp.ConvertToInlineShape
    Set rngStart = ils.Range
    rngEnd.FormattedText = rngStart.FormattedText
    rngStart.Delete
    Set ils = oDoc.InlineShapes(1)
    Set shp = ils.ConvertToShape
End Sub

默认情况下,将插入Shape并激活MoveWithText。这意味着未设置页面上的位置,编辑将影响垂直位置。例如,如果您希望Shape始终位于页面的中心,请将其设置为false。但是请注意,如果锚点移至另一页,则Shape也将移至该页。

有时候,添加LeftTopShape参数不会“占用”-您添加后可能需要再次将它们设置为属性。

答案 1 :(得分:0)

好的,我最终所做的是这样的:

Dim a As Object
On Error Resume Next
a = oDoc.Shapes.AddPicture("C:\Users\name\Desktop\file.jpg", , , 25, 25, 25, 25)

由于某些原因,这会将图像放置在位置和大小上。当我查看“ .AddPicture”文档时,我意识到它返回一个Shapes对象。所以我只是将它存储在一个废弃的对象中。由于某种原因,它将以错误响应,但最终还是会放置在文档上。所以我用:

On Error Resume Next

这将跳过错误。之后,图片将按预期放置,其余文档按预期制作

谢谢您的回答