【问题标题】:Ungroup an EMF/EPS picture file to a Microsoft Office Drawing Object in Excel VBA在 Excel VBA 中将 EMF/EPS 图片文件取消组合到 Microsoft Office 绘图对象
【发布时间】: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 文件插入工作表时仍然可以手动取消分组?

标签: excel .emf vba


【解决方案1】:

只是猜测!

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 这看起来很有效,谢谢史蒂夫 :-) 我目前正在 Word 中尝试同样的事情,由于 InlineShapes 和 Shapes 图层,事情再次不同!设置 oShp = App.ActiveDocument.Shapes.AddPicture(filename,false,true,0,0,50,50) oShp.Select Selection.ShapeRange.Ungroup.Select 'error 5
    猜你喜欢
    • 2013-10-31
    • 1970-01-01
    • 2017-07-16
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    相关资源
    最近更新 更多