Word VBA:插入没有已知文件宽高比的图片

时间:2016-10-03 19:25:53

标签: vba ms-word

.addPicture需要宽度和高度,但这最终可能会扭曲图像。添加文件图像时有没有办法使用.LockAspectRatio = msoCTrue?

另外,你如何规定一个页面来放置画布或图片?在以某种方式处理图像之前,需要停止宏录制器。

Set sCanvas = ActiveDocument.Shapes _
 .AddCanvas(Left:=MillimetersToPoints(20), Top:=MillimetersToPoints(20), _
 Width:=300, Height:=200)
Set CanvasShapes = sCanvas.CanvasItems

 With CanvasShapes
 .AddPicture FileName:="C:\somepath\image.png", _
 Left:=0, Top:=0, Width:=150, Height:=100
  ...
 End With

4 个答案:

答案 0 :(得分:2)

将画布大小设置为0并锁定其宽高比,然后添加图片。画布将缩放以适应它。加载图像后,然后根据需要缩放画布:

Set sCanvas = ActiveDocument.Shapes.AddCanvas(MillimetersToPoints(20), MillimetersToPoints(20), 0, 0)
sCanvas.LockAspectRatio = True
Set CanvasShapes = sCanvas.CanvasItems

With CanvasShapes
   .AddPicture "C:\somepath\image.png"
End With

'Scale the canvas here.

答案 1 :(得分:1)

您可以尝试使用代码here(下面粘贴以供参考)获取尺寸

Sub test()

Dim objShell As Object
Dim objFolder As Object
Dim objFile As Object
Dim fPath As Variant 'MUST be a variant, not a string
Dim fName As String

fPath = "C:\somepath"
fName = "image.png"

Set objShell = CreateObject("Shell.Application")

Set objFolder = objShell.Namespace(fPath)
Set objFile = objFolder.ParseName(fName)

MsgBox objFile.ExtendedProperty("Dimensions")

End Sub

这将为您提供可以使用的图片尺寸。

看起来输出为? w x h ?,因此您需要解析它,但这应该可行。

请注意,如果您想使用变量来定义文件路径,则必须根据here

将其声明为变体

答案 2 :(得分:1)

如果检查AddPicture方法的定义,您会发现除FileName外,所有参数都是可选的,因此不需要高度和宽度。

除非您有特定原因要添加画布,否则在添加图片之前也无需添加画布。

Word没有页面概念,因此您无法指定图片应显示在某个页面上。

答案 3 :(得分:0)

管理以找到一种方法将图片放入MS Word中的特定页面(下面的示例中的第2页):

Dim pNum as long
pNum = 2
Selection.GoTo What:=wdGoToPage, Count:= pNum