我需要编写一个宏来将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,但我无法理解它。
答案 0 :(得分:3)
我在PPT 2010中收到此错误:“形状(未知成员):无效请求。剪贴板为空或包含可能未在此处粘贴的数据。”
当你缩小或使用选择窗格时,我们都注意到“Shape 125”:
经过大量的试验和错误(我认为嵌套可能是一个问题,并尝试取消嵌套 - 成功,但错误仍然发生)我注意到每个都有{{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的最终输出:
此错误的根本原因
似乎您无法将高度/宽度为0的形状粘贴为PNG格式(尽管您可以将它们粘贴为“形状”)。这似乎是故意的限制,但遗憾的是错误信息含糊不清。
此错误的解决方法
在尝试粘贴为图像格式(PNG,JPG等)之前,请确保形状的最小尺寸为1x1
虽然您可以通过删除有问题的形状来解决问题,但这可以帮助您,这样您就不必搜索这些窗格外形状或尝试将来再次对其进行故障排除。