0

我有一些 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 允许),有没有办法解决这个问题?

4

2 回答 2

0

只是猜测!

Sub unGrp()
Dim opic As ShapeRange
Dim filename As String
filename = "C:\Users\John\Desktop\telephone.eps"
ActiveSheet.Pictures.Insert(filename).Select
Set opic = ActiveWindow.Selection.ShapeRange
opic.Ungroup
End Sub
于 2013-10-03T14:07:00.360 回答
0

一次将事物取消分组并使其保持选中状态,从而将 b/g 对象和组中的其他对象留给您;然后再次取消组合到其组件并保持选中状态:

Selection.ShapeRange.Ungroup.Select
Selection.ShapeRange.Ungroup.Select

在几个不同的简单 EPS 导入和 EMF/WMF 上对其进行了测试;与他们一起工作。

不过,请理解,Office 处理 EPS 的方式有点像流产;一直都是。至少这一次,他们出于普遍正确的原因做错事。

于 2013-10-03T14:28:12.620 回答