Get Word bookmark index to replace image inside bookmark from Excel

徘徊边缘 提交于 2019-12-12 01:49:26

问题


This question is related with a previous one.

I have an open Word document with a bunch of bookmarks, each with an inline image of an Excel table previously exported from Excel.

Now, I need to update the tables in the Word document as they have changed in Excel.

The way I'm doing this is matching the table names in Excel with the bookmark names in Word. If they are equal than I want to replace the existing images in Word by the current ones.

This is my code so far:

Option Explicit

Sub substituir()
Dim Mark As String
Dim Rng As Range
Dim ShpRng As Range
Dim WordApp As Object
Dim DocumentoDestino As Object
Dim folha As Worksheet
Dim tabela As ListObject
Dim nomeTabela As String

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, " ", "")
        Mark = CStr(tabela.Name)

        With ActiveDocument
        If .Bookmarks.Exists(Mark) Then

            Set Rng = .Bookmarks(Mark).Range ' returns runtime error 13: Type mismatch, I guess it is because .Bookmarks expects the bookmark index instead of the name.


            If Rng.InlineShapes.Count Then
                Set ShpRng = Rng.InlineShapes(1).Range
                With ShpRng
                     Debug.Print .Start, .End
                    ShpRng.Delete

                End With
            End If
        End If
        End With

     Next tabela

    End If
Next folha

End Sub

The code seems ok, except for the line marked above that returns runtime error 13, is there any way to get to the bookmark index instead of the name or another way to fix the issue?

Thanks in advance!


回答1:


The problem is from the Range object. There is such an object in Excel as well as in Word. Since you are running Excel, both Rng and ShpRng are declared as Excel ranges implicitly. Declare them as Word.Range.

Quite generally, be more careful with your use of variables. You perfectly declared Set DocumentoDestino = WordApp.ActiveDocument, but then you proceed with

With ActiveDocument
If .Bookmarks.Exists(Mark) Then

In Excel, there is no ActiveDocument. Perhaps that is why Excel correctly divines your intention to refer to DocumentoDestino. However, if you don't keep tight control instances are likely to arise - whenever you least expect them, of course - when Excel makes the wrong guess.



来源:https://stackoverflow.com/questions/43609410/get-word-bookmark-index-to-replace-image-inside-bookmark-from-excel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!