2017-08-28 56 views
1

我试图在PowerPoint中使用VBA复制粘贴形状。
此代码不能从If...End If声明中退出。
我的代码有什么问题?在PowerPoint中使用VBA复制粘贴形状

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

您能否澄清您的意思__此代码无法退出If ... End If statement__?也许你需要和“Else”条款? – ainwood

+1

@ainwood在每次遇到固体填充形状时,都会添加“形状”集合。循环是无限的如书面。 –

+0

啊 - 好点。 – ainwood

回答

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其中的每个项目。

+0

这正是我要找的。谢谢! –