Excel VBA - 复制图表并粘贴为增强的图元文件
Posted
技术标签:
【中文标题】Excel VBA - 复制图表并粘贴为增强的图元文件【英文标题】:Excel VBA - Copy a chart and paste as an enhanced metafile 【发布时间】:2013-11-12 17:39:08 【问题描述】:我正在尝试复制作为 Book1 Sheet1 中的对象的 Chart1,并将其粘贴为 Book2 Sheet1 中的增强元文件图片。我从另一个站点获得了此代码,但它不起作用:
'Book1 and Book2 previously declared as Workbooks and set
Book1.Sheets(1).ChartObjects(1).CopyPicture
Book2.Sheets(1).Range("B3").Paste
我收到运行时错误 438:“对象不支持此属性或方法”
我会使用something like this,但他们的代码引用了图表位置,如果可能的话,我想使用图表编号。
更新:
我已将我的代码修改为以下内容:
'Sheet1 and Sheet2 declared and set as Worksheets
Sheet1.ChartObjects(1).Chart.CopyPicture
Sheet2.PasteSpecial Format:="Picture (Enhanced Metafile)", _
Link:=False, DisplayAsIcon:=False
With Sheet2.Shapes(Sheet2.Shapes.Count)
.Top = Sheet2.Range("B3").Top
.Left = Sheet2.Range("B3").Left
End With
但是它现在返回运行时错误 1004:“对象 '_Worksheet' 的方法 'PasteSpecial' 失败”。
【问题讨论】:
嗯,这很奇怪。这个对我有用。顺便说一句'Sheet1 and Sheet2 declared and set as Worksheets
嗯,除非你使用 Sh1.ChartObjects(1).Chart.CopyPicture
之类的东西,否则你为什么要声明它们
@SiddharthRout - 这正是我正在做的。下次,我将它们称为 SheetA 和 SheetB 以减少混淆?
@SMPerron - Sheet1
在我的示例代码中不是我声明的变量,而是包含代码的工作簿中现有的默认代号“Sheet1”。默认情况下,您可以使用(例如)ThisWorkbook.Sheets("Sheet1")
或仅使用Sheet1
来引用同一工作簿中的工作表。您修改后的代码对我有用(但由于上述原因,我避免声明名为 Sheet1
、Sheet2
的变量)。
不知道为什么它适合你们而不是我。如果我将它从 PasteSpecail
更改为 Paste
,它会起作用,但图片质量会下降。
【参考方案1】:
例如:
Sheet1.ChartObjects(1).CopyPicture
Sheet1.PasteSpecial _
Format:="Picture (Enhanced Metafile)", _
Link:=False, DisplayAsIcon:=False
With Sheet1.Shapes(Sheet1.Shapes.Count)
.Top = Sheet1.Range("B3").Top
.Left = Sheet1.Range("B3").Left
End With
【讨论】:
如何区分 Book1 和 Book2? 它不起作用。您的代码粘贴的是图表而不是图片,并且粘贴的图表与原始图表不匹配。但它确实把它放在了正确的位置。 @SMPerron:将Sheet1.ChartObjects(1).CopyPicture
更改为Sheet1.ChartObjects(1).Chart.CopyPicture
,如此链接How to use pastepecial to paste a chart as bitmap to another sheet in vba 中所述。在那里查看蒂姆的答案。
@Siddharth - 我尝试了您建议的更改,但它导致运行时错误 1004“对象 '_Worksheet' 的方法 'PasteSpecial' 失败”。以上是关于Excel VBA - 复制图表并粘贴为增强的图元文件的主要内容,如果未能解决你的问题,请参考以下文章
将 Excel 图表复制并粘贴到 Word 中,无需链接或另存为 GIF