从 Excel 替换 Word 书签内的图像
Posted
技术标签:
【中文标题】从 Excel 替换 Word 书签内的图像【英文标题】:Replace image inside Word bookmark from Excel 【发布时间】: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
我需要帮助。
【问题讨论】:
【参考方案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
我相信这个帖子在你的后续问题中找到了答案:- ***.com/questions/43609410/…以上是关于从 Excel 替换 Word 书签内的图像的主要内容,如果未能解决你的问题,请参考以下文章
使用 POI 读取 Word 中的书签替换书签内容(doc和docx)