我尝试在PowerPoint中使用VBA复制粘贴形状
此代码无法退出If...End If
声明
我的代码出了什么问题?
Sub pasteshape()
Dim oSl As Slide
Dim oSh As Shape
For Each oSl In ActivePresentation.Slides
For Each oSh In oSl.Shapes
If oSh.Fill.Type = msoFillSolid Then
oSh.Duplicate
End If
Next
Next
End Sub
答案 0 :(得分:3)
你正在改变你正在迭代的集合,正在迭代它; 总是一个坏主意!
所以你有一个无限循环,因为每次复制一个形状时,你都会有效地为oSl.Shapes
集合添加一个实心填充形状,这是一个应该重复的实心填充形状 - 对吧?
您需要一种方法来分离知道哪些形状要复制和复制实心填充形状的过程。
制作新系列:
Dim solidShapes As Collection
Set solidShapes = New Collection
现在迭代幻灯片及其形状,但不是立即复制,将它们添加到该集合:
For Each currentShape In currentSlide.Shapes
If currentShape.Fill.Type = msoFillSolid Then
solidShapes.Add currentShape
End If
Next
注意我正在使用可读标识符而没有Systems Hungarian(也就是无用的)前缀(读取该链接!特别是如果您坚信匈牙利语符号)。
现在,您可以迭代solidShapes
集合,并.Duplicate
其中的每个项目。