在PowerPoint中使用VBA复制粘贴形状

时间:2017-08-28 20:52:40

标签: vba powerpoint powerpoint-vba

我尝试在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

1 个答案:

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