VBA(?)如何提取链接和插入的图像的文件名 - Word 2013

时间:2018-05-02 07:20:11

标签: vba ms-word word-vba word-2013

我们在Word文档(.docx)中插入和链接图片(从文件.emf插入图片)。我们的文档和图形文件存储在我们的网络驱动器上。然后,我们将文档提供给作者进行处理。文件中的图片对作者很有用。

如何以编程方式和全局方式(文档明智,而不是批处理文档):提取链接和插入图片的文件名(没有文件扩展名)?

我们有一个工具可以将Word文档.docx导出到.XML。

Ps:我搜索了可能/潜在的VBA解决方案。到目前为止,我收集了:

  1. 我无法确定/检查图片是否已在.docx中正确/正确地链接和插入
  2. 没有办法查看源代码(?至少我试过Alt + F9 / Shift + F9)
  3. 或者是宏/ vba不是要走的路?

    功能 Word 2013。 64位 图形格式。电动势 图形和word文档存储在网络驱动器上 图形未通过INCLUDEPICTURE字段插入和链接。

2 个答案:

答案 0 :(得分:0)

使用文本换行格式化的图形属于Shapes集合。这些无法使用IncludePicture来管理链接 - 他们"生活"在文档的不同层中,而不是文本和字段代码。因此,访问或管理此信息的唯一方法是通过对象模型(例如VBA)或通过Word Open XML。

对象模型为LinkFormat对象提供Shape属性,以查询和管理链接信息。除此之外,还有一些属性和方法可以打破链接,获取文件名,文件路径和完整的文件信息。

以下循环文档主体中的所有Shape个对象,并测试该类型是否为链接图片。如果是,则将完整文件信息分配给sSource

Sub GetSourceFromLinkedShape()
    Dim shp As Word.Shape
    Dim sSource As String

    For Each shp In ActiveDocument.shapes
      If shp.Type = msoLinkedPicture Then
        sSource = shp.LinkFormat.SourceFullName
      End If
    Next
End Sub

答案 1 :(得分:0)

要获得浮动和内嵌链接图片的列表,您可以使用以下代码:

Sub Demo()
Dim Shp As Shape, iShp As InlineShape, StrOut As String
With ActiveDocument.Range
  StrOut = "Linked Shapes:"
  For Each Shp In .ShapeRange
    With Shp
      If .Type = msoLinkedPicture Then
        StrOut = StrOut & Chr(11) & Split(.LinkFormat.SourceName, ".")(0)
      End If
    End With
  Next
  If InStr(StrOut, Chr(11)) = 0 Then StrOut = StrOut & " None."
  .InsertAfter vbCr & StrOut
  StrOut = "Linked InlineShapes:"
  For Each iShp In .InlineShapes
    With iShp
      If .Type = wdInlineShapeLinkedPicture Then
        StrOut = StrOut & Chr(11) & Split(.LinkFormat.SourceName, ".")(0)
      End If
    End With
  Next
  If InStr(StrOut, Chr(11)) = 0 Then StrOut = StrOut & " None."
  .InsertAfter vbCr & StrOut
End With
End Sub

请注意,上述代码仅搜索文档正文;不是页眉,页脚等。列表在文档的末尾输出。