【发布时间】:2017-11-15 16:29:43
【问题描述】:
我在 Excel 中的宏发生了最奇怪的事情。它就像一个魅力,但是当它必须复制 2 个图表并粘贴到我的 powerpoint 演示文稿中时,突然间,图表并不完全相同。
我的代码:
Set Wb = Workbooks.Open("Path\WbName.xlsx", ReadOnly:=True, UpdateLinks:=0)
它会再打开 5 个工作簿...然后它会循环,复制所有图表
Dim Charts_Arr As Variant
Charts_Arr = Worksheets("Parameters").ListObjects("Parameters").DataBodyRange.Value
For i = LBound(Charts_Arr) To UBound(Charts_Arr)
SourcePath = Charts_Arr(i, 8)
SheetName = Charts_Arr(i, 4)
ShapeNr = Charts_Arr(i, 2)
SlideNr = Charts_Arr(i, 3)
Schaling = Charts_Arr(i, 6)
Set Source = Workbooks(SourcePath)
Set PPpres = oPPTApp.ActivePresentation
Set Sh = Source.Sheets(SheetName).Shapes(ShapeNr)
Sh.Copy
Set NewSh = PPpres.Slides(SlideNr).Shapes.PasteSpecial(ppPasteJPG)
With NewSh
.Top = Charts_Arr(i, 5)
.Left = Charts_Arr(i, 7)
.ScaleHeight Schaling, msoTrue
End With
Next i
这很完美。但是当我查看 ppt 文件时,2 个图表并不完全相同。
(提示:Excel 是 Chartarea,而不是形状 - 一开始并不知道)
当手动复制图片时,我得到了正确的图片:
更奇怪的是,我在同一个工作簿的另一个工作表上还有另外 2 个图表,它们没有引起任何问题。
这可能是链接的问题,还是我复制的方式有问题?
更新
如果我按照以下建议调整代码:
Source.Sheets(SheetName).ChartObjects(ShapeNr).Chart.CopyPicture
Set NewSh = PPpres.Slides(SlideNr).Shapes.Paste
With NewSh
.Top = Charts_Arr(i, 5)
.Left = Charts_Arr(i, 7)
.ScaleHeight Schaling, msoTrue
End With
我明白了:
我猜我在代码的粘贴部分做错了。 尝试了其他可能性,最终总是没有图像,或者上面的那个。
FIXERSUPDATE
所以我制造/利用了一个漏洞。找不到将图像直接粘贴到 Powerpoint 中的方法,所以我将其粘贴到 excelsheet 'Temp' 中。并调整了阵列,这似乎奏效了。但我仍然想知道如何直接在 Powerpoint 中执行此操作。
提前感谢您的见解!
【问题讨论】:
-
您有与粘贴的图表相匹配的图表吗?
-
你试过用copypicture方法复制图表吗?
Wb.Sheet1.ChartObjects(1).Chart.CopyPicture其中 1 是图表的索引。而不是jpg,其他粘贴特殊数据类型? -
@TimWilliams Picture Nr 1 是宏之后的结果,Picture Nr 2 是原始图表。
-
@danieltakeshi 我更新了,求小费!
-
@Nathalii。不幸的是,我没有将 VBA 用于 PowerPoint,但是,即使我尝试手动复制/粘贴一些图表,它似乎也无法格式化。也许两个程序之间存在一些问题。让我们尝试粘贴另一种数据类型,例如
Set NewSh = PPpres.Slides(SlideNr).Shapes.Paste ppPasteEnhancedMetafile或Set NewSh = PPpres.Slides(SlideNr).Shapes.Paste ppPasteMetafilePicture。其他数据类型请参考this。
标签: vba excel charts powerpoint