从Word中获取Word书签索引以replace书签内的图像

这个问题与前一个有关 。

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

现在,我需要更新Word文档中的表格,因为它们在Excel中已更改。

我这样做的方式是将Excel中的表名与Word中的书签名称进行匹配。 如果它们相等,我想用当前的WordreplaceWord中现有的图像。

这是我的代码到目前为止:

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 

代码似乎没问题,除了上面标记的行返回运行时错误13,是否有任何方式获得书签索引,而不是名称或另一种方法来解决问题?

提前致谢!

问题是从Range对象。 Excel和Word中都有这样的对象。 由于您正在运行Excel,所以Rng和ShpRng都隐式声明为Excel范围。 将它们声明为Word.Range

一般来说,要小心使用variables。 您完全声明Set DocumentoDestino = WordApp.ActiveDocument ,但随后您继续

 With ActiveDocument If .Bookmarks.Exists(Mark) Then 

在Excel中,没有ActiveDocument 。 也许这就是为什么Excel正确地推断您引用DocumentoDestino意图。 但是,如果你不保持严密的控制,那么很可能会出现这样的情况 – 当你最不期望的时候 – 当Excel做出错误的猜测的时候。