2017-08-28 55 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

這正是我要找的。謝謝! –