将图片插入InlineShape

时间:2019-03-17 13:11:29

标签: vba ms-word

我正在写一个文档,其中必须包含许多图片。在不断进行的过程中,图片得到了多次更改。

我的想法是将Rectangle Shapes用作占位符,并为其指定一个合适的名称。我创建了一个宏,用于选择“形状”,删除旧图片并将新图片插入“形状”。

type SomeBuilder<'e> (e: 'e) =
    member this.Bind(x, fn) = ...
    member this.Return x  = ...
    member this.ReturnFrom x = ...
    [<CustomOperation("e")>]
    member this.E () = e        

对于浮动形状和InlineShapes,我都希望这样做。

当我将占位符形状设置为InlineShapes时,TypeBackspace行将删除InlineShape,并且图片不会插入到InlineShape中。

1 个答案:

答案 0 :(得分:0)

非常感谢您的帮助。经过许多努力,使用Tables + Bookmarks的解决方案非常有效。 这是代码:

Sub InsertPic(Pic As String, Cut As Single)
Dim strFile As String
Dim strExt As String
Dim ils As InlineShape

strFile = "C:\Pictures“
strExt = ".png"

Application.ScreenUpdating = False

ActiveDocument.Bookmarks(Pic).Select
Selection.Delete

Set ils = Selection.InlineShapes.AddPicture(FileName:= _
strFile & "/" & Pic & strExt, _
LinkToFile:=False, SaveWithDocument:=True)

    With ils
    .PictureFormat.CropBottom = CentimetersToPoints(Cut)
    .LockAspectRatio = msoTrue
    .Height = .Range.Cells(1).Height
    If .Width > .Range.Cells(1).Width Then
       .Width = .Range.Cells(1).Width
    End If
    End With

ActiveDocument.Bookmarks.Add (Pic)

Application.ScreenUpdating = True

End Sub


Sub Insert01()
InsertPic "Image01", 20
MsgBox "Done"
End Sub

一些解释:

对于此代码,书签和图片需要相同的名称。我这样做是为了避免混淆。

使用Selection.Delete命令,书签也会被删除,因此我只是在末尾添加了一个具有相同名称的新书签。我敢肯定有解决这个问题的更优雅的方法,但是这个解决方案有效。

我经历了很多挣扎,因为我想种植Picure。但是,当插入表格单元时,其大小将更改为表格单元的大小,然后进行切割步骤。因此,Picturs无法满足整个单元格的大小。因此,我添加了一部分以将Image调整为表格单元格大小。同样,我肯定有更好的方法来克服这个问题...

由于调整大小,万客隆需要一些时间(至少对于我的文档而言)。所以我禁用了屏幕更新。