我的最终目标是能够从 Excel 工作表(总共 16 个)复制图表,并将它们粘贴到 Word 文档中的已知书签处,与文本内联。我不希望 Word 文件链接到电子表格,原因我不会在这里讨论。然后,我需要能够稍后删除这些相同的图表,然后再将新的一组图表复制到文档中。
Word中的InLineShapes似乎没有“Name”属性,只有一个索引,我认为它必须是Long类型,而不是整数类型。当我单击已复制的图表并使用 Word 功能区上的“编辑”>“选择”按钮时,它确实会显示每个图表的名称,如图 1 等。
我目前在 Excel 工作簿中使用以下代码将图表复制并粘贴到 Word 中,这似乎工作正常。
This code will use Bookmarks to place the charts and copy them from this Workbook
For i = 1 To 16
Sheets(sheetnames(i)).Select
ActiveSheet.ChartObjects(Chartlocn(i)).Activate
ActiveChart.ChartArea.Copy
With d.Bookmarks(Bookmarklocn(i)).Range
.Select
objW.Selection.PasteSpecial Link:=False, DataType:=15, Placement:=wdInLine, _
DisplayAsIcon:=False
End With
Next i
我尝试使用以下代码来删除图表:
j = d.InlineShapes.Count
counter = 0
For i = 1 To d.InlineShapes.Count
counter = counter + 1
MsgBox (i)
'If d.InlineShapes.Item(counter).Type = _
'wdInlineShapePicture Then
d.InlineShapes.Item(counter).Select
objW.Selection.Delete Unit:=wdCharacter, Count:=1 ' Came from Macro Recording
' Else
'End If
Next i
上面注释掉的部分对我不起作用。
尽管检查了 Word 文件和 Excel 工作簿中我能想象到的所有内容,但每个图表似乎都是相同的 - 所有内联,所有顺序“名称”图片 x,复制和粘贴的方法相同。
但观察到的行为是,有些图表被删除,有些则没有。
是否有一种机制以某种方式识别图表然后删除它们。我知道它们已粘贴在书签位置。我遗漏了一些明显的东西,或者是否有更好的复制和粘贴方法,以便我稍后可以通过某些名称或标识符“获取”它们?
如果您只想使用
For
循环删除活动 Word 文档中的所有图表,您可能需要从最高索引开始循环
For i = d.InlineShapes.Count to 1 Step -1
但是使用
For Each
循环会更简单、更好:
例如:
Dim WordApp As Word.Application
Set WordApp = GetObject(, "Word.Application")
Dim chrt As Word.InlineShape
For Each chrt In WordApp.ActiveDocument.InlineShapes
chrt.Delete
Next