错误:"指定的数据类型不可用"在PowerPoint中粘贴Shapes为PNG格式时

时间:2014-07-10 11:38:43

标签: vba type-conversion powerpoint powerpoint-vba

我需要编写一个宏来将PPT演示文稿中的所有分组图表(形状,箭头和文本)转换为PNG。 (我正在使用一些电子教学软件转换PPT,图表最终会损坏;我需要它们成为PNG,因为增强的图元文件也存在问题)。

我一直在使用一些将图片(增强型元文件)转换为PNG的宏稍微修改过的代码。我所做的只是将msoPicture改为msoGroup:

Sub ConvertAllPicsToPNG()
    Dim oSl As Slide
    Dim oSh As Shape

    For Each oSl In ActivePresentation.Slides
        For Each oSh In oSl.Shapes
            ' modify the following depending on what you want to
            ' convert
            Select Case oSh.Type
                Case msoGroup
                    ConvertPicToPNG oSh
                Case Else

            End Select
        Next
    Next

End Sub

Sub ConvertPicToPNG(ByRef oSh As Shape)
    Dim oNewSh As Shape
    Dim oSl As Slide

    Set oSl = oSh.Parent
    oSh.Copy
    Set oNewSh = oSl.Shapes.PasteSpecial(ppPastePNG)(1)

    With oNewSh
        .Left = oSh.Left
        .Top = oSh.Top
        Do
            .ZOrder (msoSendBackward)
        Loop Until .ZOrderPosition = .ZOrderPosition
    End With

    oSh.Delete

End Sub

我收到错误"形状(未知成员)"在线

Set oNewSh = oSl.Shapes.PasteSpecial(ppPastePNG)(1)

我怀疑我的VBA对象参考模型存在问题,因为研究告诉我GroupItems和GroupShapes,但我无法理解它。

1 个答案:

答案 0 :(得分:3)

我在PPT 2010中收到此错误:“形状(未知成员):无效请求。剪贴板为空或包含可能未在此处粘贴的数据。”

当你缩小或使用选择窗格时,我们都注意到“Shape 125”:

enter image description here

经过大量的试验和错误(我认为嵌套可能是一个问题,并尝试取消嵌套 - 成功,但错误仍然发生)我注意到每个都有{{1 }}。如果我将其改为任何正值,那就成功!

所以这里是修复 - 调用一个新函数来确保形状有高度> 0:

0

这是功能:

    For Each oSh In oSl.Shapes
        ' modify the following depending on what you want to
        ' convert
        Select Case oSh.Type
            Case msoGroup
                'Ensure each grouped shape has h/w of at least "1"
                FixShape oSh
                ConvertPicToPNG oSh
            Case Else

以下是将形状转换为PNG的最终输出:

enter image description here

此错误的根本原因

似乎您无法将高度/宽度为0的形状粘贴为PNG格式(尽管您可以将它们粘贴为“形状”)。这似乎是故意的限制,但遗憾的是错误信息含糊不清。

此错误的解决方法

在尝试粘贴为图像格式(PNG,JPG等)之前,请确保形状的最小尺寸为1x1

虽然您可以通过删除有问题的形状来解决问题,但这可以帮助您,这样您就不必搜索这些窗格外形状或尝试将来再次对其进行故障排除。