Как выбрать несколько фигур с похожими именами в PowerPoint VBA?

#vba

#vba

Вопрос:

Есть ли какой-либо способ выбрать форму с несколькими фигурами из слайда с тем же именем фигуры.

Например, у меня есть 5 фигур с именем «Текстовое поле 60». И я хочу запустить макрос, который выбирает все фигуры из слайда с именем «Текстовое поле 60». Использовали приведенный ниже код.

 ActiveWindow.View.Slide.Shapes.Range("Textbox 60").Select
  

Ответ №1:

Вот один из подходов:

 Sub Tester()
    SelectByName ActivePresentation.Slides(1), "Textbox1"
End Sub

Sub SelectByName(sld As Slide, nm As String)
    Dim s As Shape, first As Boolean
    first = True
    For Each s In sld.Shapes
        If s.Name = nm Then
            s.Select first 'Argument determines whether to add to 
            first = False  '  existing selection, or replace it
        End If
    Next s
End Sub
  

Однако вам следует попробовать последовать предложению @TinMan — это «лучший» способ.

Ответ №2:

По возможности следует избегать активации и выбора объектов. Вам лучше работать с фигурами, используя ShapeRange.

 Sub Main()
    Dim ShapeRange As ShapeRange
    Set ShapeRange = FindShapes(ActiveWindow.View.Slide, "Textbox 60")
    If Not ShapeRange Is Nothing Then
        
    End If
End Sub


Function FindShapes(Slide As Slide, Pattern As String) As ShapeRange
    Dim Results() As Long
    ReDim Results(1 To Slide.Shapes.Count)
    Dim n As Long
    Dim Index As Long
    For Index = 1 To Slide.Shapes.Count
        With Slide.Shapes(Index)
            .Name = "Textbox 60"
            If .Name Like Pattern Then
                n = n   1
                Results(n) = Index
            End If
        End With
    Next
    
    If n > 0 Then
        ReDim Preserve Results(1 To n)
        Set FindShapes = Slide.Shapes.Range(Results)
    End If
End Function
  

Примечание: я переписал код для обработки нескольких фигур с одинаковым именем.