Word:将链接的图像转换为嵌入式

时间:2015-09-17 09:47:03

标签: image vba word-vba

我有很多包含链接图片的Word文件。这些Word文件是在网络驱动器上自动创建的,该文件位于必须定期清空的临时文件夹中。

所以我必须将Word文件移动到另一个文件夹进行存档。 当我移动Word文件时,图像始终指向临时文件夹。当我删除临时文件夹时,移动的Word文件不再具有工作图像。

有两种方法可以解决这个问题:

  • 将链接的图像转换为嵌入的图像。
  • 将链接图像的路径更改为存档文件夹。

我知道我可以通过文件手动执行此操作 - >编辑文件链接,但我更喜欢通过宏来执行此操作。这个宏同时执行这两个操作:首先它更改存档文件夹的路径,然后它断开链接:

Sub ConvertLinkedImagesToEmbedded()
Dim i As Integer
Dim OldName As String
Dim OldPath As String
Dim NewPath As String
    For i = 1 To ActiveDocument.InlineShapes.Count
        ActiveDocument.InlineShapes.Item(i).Select
        If ActiveDocument.InlineShapes.Item(i).Type = wdInlineShapeLinkedPicture Then
            OldName = ActiveDocument.InlineShapes.Item(i).LinkFormat.SourceName
            OldPath = ActiveDocument.InlineShapes.Item(i).LinkFormat.SourcePath
            NewPath = ActiveDocument.Path & "\" & OldName
            Dim Ext As String
                If FileThere(NewPath) Then
                  Selection.InlineShapes.AddPicture FileName:=NewPath, LinkToFile:=False, SaveWithDocument:=True
                  ActiveDocument.InlineShapes.Item(i).LinkFormat.Update
                Else
                MsgBox "ConvertLinkedImagesToEmbedded: image file " & NewName & " does not exist.", vbOKOnly
                End If
            End If
    Next i
End Sub

Function FileThere(FileName As String) As Boolean
    FileThere = (Dir(FileName) > "")
End Function

这看起来应该有效:当我运行它时,每个图像的类型从wdInlineShapeLinkedPicture更改为wdInlineShapePicture。 文件大小也会更改,表示图像已嵌入文件中。当我删除临时文件夹时,Word文件仍然显示图像。

但是当我转到文件 - >编辑文件链接时,所有图像仍然列为链接图像。更糟糕的是,链接仍然指向临时文件夹。因此,如果有人使用此对话框更新其中一个文件,他将丢失图像。

所以问题是,我怎样才能获得File-> Edit链接到文件对话框以显示图像的正确状态(即嵌入)?

1 个答案:

答案 0 :(得分:0)

我刚遇到原始帖子,当时正在寻找一种方法来取消链接的图片的链接;这就是我最终得到的。我正在为图片添加边框以验证是否已完成操作;如果不需要,可以轻松将其注释掉。

Sub BreakPictureLinks()

Dim intCount As Integer
Dim i As Integer

With ActiveDocument

'loop through inline shapes
For i = 1 To .InlineShapes.Count

    With .InlineShapes(i)
        'check if the current shape is a linked picture
        If .Type = wdInlineShapeLinkedPicture Then

            ' Give it a border
           .Line.BackColor = vbBlack
           .Line.Weight = 1
           .Line.Style = msoLineSingle

            ' unlink it
            '.LinkFormat.SavePictureWithDocument = True
            .LinkFormat.BreakLink

        End If
    End With

Next i

End With    ' Active document

End Sub