从 Excel 替换 Word 书签内的图像

Posted

技术标签:

【中文标题】从 Excel 替换 Word 书签内的图像【英文标题】:Replace image inside Word bookmark from Excel 【发布时间】:2017-09-22 06:21:57 【问题描述】:

我有一个打开的 Word 文档,其中包含一堆书签,每个书签都包含之前从 Excel 导出的 Excel 表格的内嵌图像。

现在,我需要更新 Word 文档中的表格,因为它们在 Excel 中发生了变化。

我这样做的方法是将 Excel 中的表格名称与 Word 中的书签名称相匹配。如果它们相等,我想将 Word 中的现有图像替换为当前图像。

这是我目前的代码:

Sub substituir()
Set WordApp = GetObject(class:="Word.Application")
Set DocumentoDestino = WordApp.ActiveDocument

For Each folha In ThisWorkbook.Worksheets
    If folha.Visible Then

    'loop all excel tables
    For Each tabela In folha.ListObjects
        tabela.Name = Replace(tabela.Name, " ", "")
        nomeTabela = tabela.Name

        For Each myBookmark In DocumentoDestino.Bookmarks
            If Right(myBookmark.Name, 4) = "PGST" Then

              'This is where I need help
              If myBookmark.Name = nomeTabela Then
                'code to clear the table already in myBookmark here


                'then copy and paste tables in myBookmark
                tabela.Range.Copy
                myBookmark.Range.PasteSpecial link:=False, DataType:=wdPasteMetafilePicture, _
                    Placement:=wdInLine, DisplayAsIcon:=False

              End If
            End If
        Next myBookmark

     Next tabela

    End If
Next folha

End Sub

我尝试了很多不同的方法,从删除书签并将其重新添加回其他人,但似乎没有任何效果。

在评论中:'code to clear the table already in myBookmark here我需要帮助。

【问题讨论】:

【参考方案1】:

在以下代码中,我尝试包含您的项目可能需要的语法。

Private Sub TestMark()

    Dim Mark As String
    Dim Rng As Range
    Dim ShpRng As Range

    Mark = "Text1"
    With ActiveDocument
        If .Bookmarks.Exists(Mark) Then
            Set Rng = .Bookmarks(Mark).Range
            If Rng.InlineShapes.Count Then
                Set ShpRng = Rng.InlineShapes(1).Range
                With ShpRng
                    Debug.Print .Start, .End
                End With
            End If
        End If
    End With
End Sub

当然,一旦您知道范围的开始和结束,您就可以对其进行操作,即删除和替换它。

我突然想到,您可能会使用 InlineShape 的 Caption 属性来查找和解决它。

【讨论】:

我对其进行了测试,现在它返回错误:Set Rng = .Bookmarks(Mark).Range 行上的“运行时错误:13:类型不匹配”。 if Mark = "Text1",代码运行,但我认为是因为它没有执行这一行(之前的if语句返回false。现在,当Mark= CStr(tabela.Name),那么if语句返回true它阻塞了这条线。 Type mismatch 是一个声明问题。 Mark 必须是字符串,Rng 必须是范围。你有所有变量的 Dim 语句吗? 是的,我有 Option Explicit 我相信这个帖子在你的后续问题中找到了答案:- ***.com/questions/43609410/…

以上是关于从 Excel 替换 Word 书签内的图像的主要内容,如果未能解决你的问题,请参考以下文章

通过 VBA 访问 Excel 表中的图像

使用 POI 读取 Word 中的书签替换书签内容(doc和docx)

matlab 生成图像,直接导出到excel, word(转载)

批量自动生成Word程序

批量自动生成Word程序

使用 POI 读取 Word docx 中的书签替换书签内容(汉字或合并外部文档内容)