2016-09-29 4 views
0

VBAの新機能です。スライドからすべてのシェイプを取得する必要があるpptプレゼンテーションがあります。 位置(左上)とサイズ(幅、高さ)を取得する必要があります。 最初にどこで確認する必要がありますか?VBAでの位置、サイズ、hrefの取得

私は何かを得ましたが、まだ改善する必要があります。それがうまくいけば本当にわからない。

Sub Slide() 

Dim sld As Slide 
Dim shp As Shape 
Dim count As Integer 

count = 1 

    For Each sld In ActivePresentation.Slides 
     For Each shp In sld.Shapes 

      Debug.Print count 
      Debug.Print shp.Left 
      Debug.Print shp.Top 
      count = count + 1 

     Next shp 
    Next sld 

End Subの

+0

あなたはこれまでに何をしようとしたのですか?何かチェックしましたか? – trincot

+0

はい、質問を更新します。 –

答えて

2

ネストされたループ、あなたが言及した情報に加えて、各形状のIDと名前を出力し、アクティブなプレゼンテーションのすべてのスライドと各スライドのすべての図形をループします。内部ハイパーリンクがある場合、リンクされたスライドに関する情報が出力されます。また、リンクされたスライドのオブジェクトへの参照を取得するコードを追加しました。

Option Explicit 

Sub OutputSlides() 
    Dim oSlide As Slide 
    Dim oShape As Shape 
    Dim i As Long 
    Dim oAction As ActionSetting 
    Dim oHyperlink As Hyperlink 

    For Each oSlide In ActivePresentation.Slides 
     For Each oShape In oSlide.Shapes 
      Debug.Print "Shape #" & oShape.Id & " (" & oShape.Name & ") - Slide: " & oSlide.SlideNumber & " Position: " & oShape.Left & "," & oShape.Top _ 
       ; " Size: " & oShape.Width & "x" & oShape.Height 


      For Each oAction In oShape.ActionSettings 
       On Error Resume Next 

       If oAction.Action = ppActionHyperlink Then 
        Set oHyperlink = oAction.Hyperlink 

        ''See more: http://www.pptfaq.com/FAQ00162_Hyperlink_-SubAddress_-_How_to_interpret_it.htm 
        Dim parts() As String 
        Dim slideId As Long 
        Dim slideIndex As Long 
        Dim slideTitle As String 
        Dim linkedSlide As Slide 

        parts = Split(oHyperlink.SubAddress, ",") 

        slideId = CLng(parts(0)) 
        slideIndex = CLng(parts(1)) 
        slideTitle = parts(2) 

        If slideId > 0 Then 
         Debug.Print " --Internal hyperlink to slide #: " & slideIndex & "(id: " & slideId&; ", title: " & slideTitle & ")" 

         ''this gets you a reference to the linked slide if you need it: 
         ''Set linkedSlide = oShape.Parent.Parent.Slides(slideIndex) 
        End If 

       End If 
      Next oAction 
     Next oShape 
    Next oSlide 
End Sub 

出力例:

Shape #2 (Title 1) - Slide: 1 Position: 120,88,37504 Size: 720x188 
Shape #3 (Subtitle 2) - Slide: 1 Position: 120,283,625 Size: 720x130,375 
Shape #4 (CommandButton1) - Slide: 1 Position: 120,73 Size: 237x141 
Shape #5 (TextBox1) - Slide: 1 Position: 514,1251,134,875 Size: 72x72 
Shape #2 (Title 1) - Slide: 2 Position: 120,88,37504 Size: 720x188 
Shape #3 (Subtitle 2) - Slide: 2 Position: 120,283,625 Size: 720x130,375 
Shape #4 (CommandButton1) - Slide: 2 Position: 120,73 Size: 237x141 
Shape #5 (TextBox1) - Slide: 2 Position: 514,1251,134,875 Size: 72x72 
Shape #2 (Title 1) - Slide: 3 Position: 66,28,75 Size: 828x104,375 
Shape #3 (Content Placeholder 2) - Slide: 3 Position: 66,143,75 Size: 828x342,625 
Shape #5 (Straight Arrow Connector 4) - Slide: 3 Position: 175,4366,201,8028 Size: 263,662x140,9577 
--Internal hyperlink to slide #: 3(id: 257, title: Slide 3) 
+0

ある場合は、ハイパーリンクを取得する方法はありますか? –

+0

こんにちは、選択したShapeのハイパーリンクオブジェクトがあればそれを取得するコードを追加しました。正確にあなたがどのような種類のハイパーリンクを考慮しているのか分かりませんので、リンクされたドキュメントを見てください。 – Jbjstam

+0

pptには、そのpptプレゼンテーションの他のスライドにリンクするシェイプがあります。 –

関連する問題