web-dev-qa-db-ja.com

IDまたは名前で形を取得

Idを知っている場合、形状を取得する方法はありますか?

例えば:

Dim myshape As Shape
myshape.Id = 42
myshape = getShapeById(myshape.Id)

または、代わりに、Nameで形状を取得できますか?

Dim myshape As Shape
myshape.Name = "Rectangle 42"
myshape = getShapeByName(myshape.Name)
5
Mateen Ulhaq

ShapeNameで取得するには、次のようにします...:

Function getShapeByName(shapeName As String, Slide As Integer)
    Set getShapeByName = ActivePresentation.Slides(Slide).Shapes(shapeName)
End Function

Dim myshape As Shape
myshape = getShapeByName("Rectangle 42", 1)
4
Mateen Ulhaq

.Nameによって形状.Idを取得することは、 .Idによってその.Nameを取得する よりもやや複雑です。

しかし、これがその方法です。

Sub PrintShapeName()
    Debug.Print getNameByID(3, 1)
End Sub

Function getNameByID(shapeID As Long, slide As Integer)
    Dim ap As Presentation: Set ap = ActivePresentation
    Dim sl As slide: Set sl = ap.Slides(slide)
    sl.Shapes.SelectAll
    Dim sr As ShapeRange
    Set sr = Windows(1).Selection.ShapeRange
    Dim s As Shape
    For Each s In sr
        If s.id = shapeID Then
            getNameByID = s.Name
            Exit Function
        End If
    Next
End Function
5
Todd Main

IDでわからないが、名前でシートShapesコレクションオブジェクトを使用する

Set myShape = <SheetObject>.Shapes("<ShapeName>")

例えば

Set myShape = ActiveSheet.Shapes("Rectangle 1")
0
chris neilsen
sName = ActivePresentation.Slides(k).Shapes(j).Name

ここで、kはスライド番号、jとそのスライドの形状番号です。

次のような方法で、各ページの形状をループできます。

k = 1
For j = 1 To ActivePresentation.Slides(k).Shapes.Count
Next j

クリス

0