【发布时间】:2013-10-09 01:33:06
【问题描述】:
我有一些 VBA 代码可以将 EPS 图片插入到 PowerPoint 幻灯片中,如下所示:
Function InsertPicture(filename as String) As Shape
Dim curSlide As Integer
Dim oShp As Shape, gShp As Shape
curSlide = ActiveWindow.View.Slide.SlideIndex
With ActivePresentation.Slides(curSlide).Shapes
Set oShp = .AddPicture(filename, msoFalse, msoTrue, 0, 0)
' Convert (by ungrouping) from EPS to Microsoft Office drawing object
oShp.Ungroup.Name = "GroupEPS"
' Return the new Microsoft Office drawing object
Set InsertPicture = ActivePresentation.Slides(curSlide).Shapes("GroupEPS")
End With
End Sub
Excel的等效插入图片功能是这样的:
ActiveSheet.Pictures.Insert(filename).Select
如果需要对对象的引用,也可以这样做:
Dim oPic as Object
Set oPic = ActiveSheet.Pictures.Insert(filename)
但是当我尝试使用以下行取消组合时,我收到错误 438“对象不支持此属性或方法”
' For a selection
Selection.Ungroup
' For an object
oPic.Ungroup.Name = "GroupEPS"
但是,如果我右键单击正确插入工作表的图片,我可以在确认转换为 Microsoft Office 绘图对象后成功取消组合。
为什么 UI 允许取消分组但 Excel VBA 不允许(而 PowerPoint VBA 允许),有没有办法解决这个问题?
【问题讨论】:
-
我不熟悉 EPS 形状的处理方式,但我猜 Excel 将其视为 OLE 对象。您可以调试并检查您尝试在 Excel 中取消组合的形状类型吗?如果您只想取消分组的形状,形状类型应该是 msoGroup。
-
对,再玩一会儿,我可以通过创建 PowerPoint 实例、创建新演示文稿、添加幻灯片、插入 EPS 图片、取消分组、复制转换后的绘图来让它工作对象到剪贴板并将其粘贴到 Excel,它在选择窗格中显示为一组形状。
-
但这一切都需要大量时间并且非常笨重。我已经上传了一个我在这里使用的示例 EPS 文件:i-present.co.uk/stackoverflow/b1-034-034_telephone.eps 如果我将它插入到 PowerPoint 幻灯片中并使用 activewindow.selection.ungroup 它可以工作,但对于 Excel 却不是这样,我得到错误“对象不支持此属性或方法”。诡异的。人们会认为两个 MSO 应用程序在处理此类媒体内容时会使用相同的机制!对于类型,我在 PowerPoint 中得到 2(ppselectionshapes),但在 Excel 中出现上述相同的错误。
-
Excel 似乎只是不喜欢 EPS 文件,但是为什么在通过 UI 将同一个 EPS 文件插入工作表时仍然可以手动取消分组?