此问题与previous one相关。
我有一个带有一堆书签的打开Word文档,每个书签都有一个以前从Excel导出的Excel表格的内嵌图像。
现在,我需要更新Word文档中的表格,因为它们已在Excel中更改。
我这样做的方法是将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的行,有没有办法获取书签索引而不是名称或其他方法来解决问题?
提前致谢!
答案 0 :(得分:1)
问题来自Range
对象。在Excel和Word中都有这样的对象。由于您运行的是Excel,因此Rng和ShpRng都会隐式声明为Excel范围。将它们声明为Word.Range
。
通常,对变量的使用要更加谨慎。你完美地声明了Set DocumentoDestino = WordApp.ActiveDocument
,但接着你继续
With ActiveDocument
If .Bookmarks.Exists(Mark) Then
在Excel中,没有ActiveDocument
。也许这就是为什么Excel正确地划分你引用DocumentoDestino
的意图的原因。但是,如果你不保持紧密的控制实例可能会出现 - 当你最不期望它们时 - 当然,当Excel做出错误的猜测时。