此问题与previous one有关。获取Word书签索引以替换Excel中的书签内部图像
我有一堆书签,每个与先前从Excel导出Excel表格中的内嵌图像的打开的Word文档。
现在,我需要更新的Word文档中的表格,因为他们在Excel中发生了变化。
我这样做的方式是匹配在Word中的书签名称在Excel表名。如果它们等于我想用当前的Word替换Word中现有的图像。
这是到目前为止我的代码:
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,有没有什么办法让到书签的索引而不是名称或解决问题的另一种方法是什么?
提前致谢!
谢谢,我的知识仅限于excel vba,并不像您的知识那么强烈。我现在改进了变量声明,但第二个if语句不计算任何内联形状。这里有一个链接到word文档https://portalg-my.sharepoint.com/personal/nuno_portalg_onmicrosoft_com/_layouts/15/guestaccess.aspx?docid=177a32a1ed0a745bb93598158acd0f2ee&authkey=AWS7Irv4EdU6TL7gb8ewFgE –
对不起,我不会下载你的文件,但谢谢你鲜花。然而,关于将InlineShape放入一个范围内,您肯定比我有更多的经验。我添加了计数功能,正是因为我对如何做到这一点怀疑。然后,您的形状必须位于书签旁边。使用Rng.Start和Rng.End,你可以在你想要的地方准确定义一个范围。现在的问题是,如何添加书签和InlineShape。也许另一个问题。你有没有考虑使用形状的标题? – Variatus
减少您的选择。形状有名字。 InlineShapes具有标题。为什么你放弃了这两种选择? InlineShapes具有索引号,这些索引号在加载时按照它们加载的顺序排列。太不可靠?为可能的InlineShape将是唯一的段落创建书签。然后在书签的段落中找到形状。每个解决方案都有自己的问题。您不必面对所有选项的所有问题。 :-) – Variatus