我试图使用VB^中包含的Microsoft 15.0对象库将图像插入到word文档中,我看到插入图形文件的唯一方法是这样做:
oDoc.Range.InlineShapes.AddPicture ("C:\Users\name\Desktop\file.jpg")但是,我想要一张可以放在文本上的图片,以及我想要它在文档中的位置.是否有任何使用VB6代码的方法来做到这一点?
发布于 2018-07-21 04:40:07
Word有两种不同的方法来管理图像和其他嵌入式对象:InlineShapes和Shapes。前者与文本流中的字符相同;后者在与文本不同的层中具有文本包装、穿孔和“活动”。
将图形文件作为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传递给Anchor参数中的Shapes.AddPicture方法。
注意,一旦插入了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也将移动到该页面。
有时,Left和Top参数在添加Shape时不会“接受”--添加之后可能需要将它们再次设置为属性。
发布于 2018-07-21 15:43:49
好吧,我最后做的是这样的:
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
这就跳过了错误。在此之后,图片按预期放置,其余文档按预期绘制。
谢谢你的回答
https://stackoverflow.com/questions/51451179
复制相似问题