【问题标题】:Replace image inside Word bookmark from Excel从 Excel 替换 Word 书签内的图像
【发布时间】: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我需要帮助。

【问题讨论】:

    标签: vba excel ms-word


    【解决方案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
    • 我相信这个帖子在你的后续问题中找到了答案:- stackoverflow.com/questions/43609410/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多