如何使用VB6将非内联图片插入到word文档中?

How to insert a non-inline picture into a word document using VB6?

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

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

但是,我想要一张图片,它可以放置在文本之上以及我想要它在文档中的位置...有什么方法可以使用 VB6 代码来实现吗?

Word 有两种不同的方式来管理图像和其他嵌入对象:作为 InlineShapes 和作为 Shapes。第一个被视为与文本流中的字符相同;后者在与文本不同的层中具有文本换行格式和 "live"。

要插入图形文件作为 Shape:

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

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

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

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

也可以作为 InlineShape 插入然后使用 ConvertToShape 以获得可以应用文本换行格式的 Shape 对象。

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

请注意,一旦插入 Shape,就无法直接更改 anchor 的位置。可以使用剪切和粘贴来完成。另一种可能是使用 ConvertToInlineShape 方法,这样您就可以使用 Range 移动图形,然后 ConvertToShape 将其转回 Shape,但在此一些定位和包装属性可能需要重置。这里有一个使用 "convert" 方法的例子:

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 也会移动到该页面。

有时,LeftTop 参数在添加 Shape 时不会 "take" - 您可能需要在添加后再次将它们设置为属性.

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

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

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

On Error Resume Next

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

感谢您的回答