我正在尝试使用VB ^附带的Microsoft word 15.0对象库将图像插入Word文档中,而我看到的插入图形文件的唯一方法是通过此方法:
oDoc.Range.InlineShapes.AddPicture ("C:\Users\name\Desktop\file.jpg")
但是,我想要一张可以放在文本上方以及在文档中想要的位置的图片...是否可以使用VB6代码来做到这一点?
答案 0 :(得分:1)
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
参数中的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
也将移至该页。
有时候,添加Left
时Top
和Shape
参数不会“占用”-您添加后可能需要再次将它们设置为属性。
答案 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
这将跳过错误。之后,图片将按预期放置,其余文档按预期制作
谢谢您的回答