質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.03%

  • VBA

    1410questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

【VBA】PowerPointマクロでカギ線コネクタの頂点を指定(変更)する方法

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 333

tanaka1202

score 6

前提・実現したいこと

PowerPointマクロで下記のような形のカギ線コネクタを描画したい
|_

発生している問題・エラーメッセージ

VBAでカギ線コネクタの頂点(図形をクリックすると黄色い菱形で表示されているもの)をどう指定するのか分からず、
下記のようなカギ線コネクタしか描画できない
 ̄|_

該当のソースコード

Call ActivePresentation.Slides(1).Shapes.AddConnector(msoConnectorElbow, 0, 0, 100, 100)

試したこと

ConnectorFormatオブジェクトのメンバーを調べましたが、それらしいプロパティは見当たらなかったです

補足情報(言語/FW/ツール等のバージョンなど)

powerpoint 2010

ご教授よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

記載いただいたコネクタ形状は、始点の向きが異なりますよね。

コネクタの始点・終点を定めていない(どこにも接続していない)ときは現状のようなクランク型をしていると思います。
始点・終点を他のオブジェクトに接続することで、オブジェクトの位置関係によってはL型のコネクタになります。

黄色い菱型で

黄色い菱型の部分というのは、カギ線コネクタの折れるを位置を調整するものを指していると思いますが、VBAでこれを制御するのはShape.Adjustmentsです。
カギ線コネクタにはアジャスタは1つしかないので、Shape.Adjustments.Item(1)の値を指定します。
詳しい資料がみつからなかったので推測になりますが、値の範囲は0~1で指定するようで、おそらく線の長さに対する折れる位置を調整するものと思います。

両端が接続されていないコネクタであれば、Shape.Adjustments.Item(1)=0またはShape.Adjustments.Item(1)=1のように極地に設定することで擬似的に角がひとつしかないL型のコネクタを表現できます。
ただ、接点を移動してしまうとまたクランク型に戻ってしまいますのでご注意ください。

別案

コネクタの両端をで他のオブジェクトに接続することで、L型コネクタにすることもできます。
例えば2つの四角オブジェクトを用意し、始点を1つ目のオブジェクトの下端に、終点を2つ目のオブジェクトの左端に接続することで、位置関係によってL型のコネクタになります。

私がL型コネクタを表現する時は、小さな非表示オブジェクト2つ作成し、コネクタの始点・終点をこれに接続することが多いです。

サンプル

以下は上記2つの方法でL型コネクタを表現するVBAサンプルです。

Sub Test()
    Dim myDoc As Slide
    Set myDoc = ActivePresentation.Slides(1)

    '■隠しオブジェクトを使ったL型コネクタ■(サイズや形状の調整は隠しオブジェクトを移動して行います)
    Dim shpBox1 As Shape
    Dim shpBox2 As Shape
    Dim shpCon As Shape

    Set shpBox1 = myDoc.Shapes.AddShape(msoShapeRectangle, 10, 10, 10, 10)
    Set shpBox2 = myDoc.Shapes.AddShape(msoShapeRectangle, 10, 10, 10, 10)
    Set shpCon = myDoc.Shapes.AddConnector(msoConnectorElbow, 10, 10, 10, 10)
    shpCon.Line.ForeColor.RGB = RGB(255, 0, 0) '赤線
    '隠しオブジェクトを非表示
    shpBox1.Visible = msoFalse
    shpBox2.Visible = msoFalse
    '隠しオブジェクトにコネクタ接続
    shpCon.ConnectorFormat.BeginConnect shpBox1, 3
    shpCon.ConnectorFormat.EndConnect shpBox2, 2
    '隠しオブジェクトの位置で形状を調整
    shpBox1.Left = 10
    shpBox1.Top = 10
    shpBox2.Left = 60
    shpBox2.Top = 60


    '■擬似的なL型コネクタ■(始点/終点を移動するとクランク型になります)
    Dim shpCon2 As Shape
    Set shpCon2 = myDoc.Shapes.AddConnector(msoConnectorElbow, 100, 100, 150, 150)
    shpCon2.Line.ForeColor.RGB = RGB(0, 0, 255)  '青線
    '調整
    shpCon2.Adjustments(1) = 0


    Dim shpCon3 As Shape
    Set shpCon3 = myDoc.Shapes.AddConnector(msoConnectorElbow, 200, 200, 250, 250)
    shpCon3.Adjustments(1) = 1
    '調整
    shpCon3.Line.ForeColor.RGB = RGB(0, 255, 0) '緑線
End Sub

参考になれば幸いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/11 11:50

    ありがとうございます。
    `Shape.Adjustments`がまさしく探していたプロパティでした。
    おかげさまで解決しました。

    キャンセル

  • 2017/10/11 11:58

    無事解決したようでなによりです。

    実は今回、PowerPointでの質問ではありましたが、私が.Adjustmentsプロパティを見つけたのはExcelVBAでした。
    ExcelVBAにはマクロの自動記録がありますので、コネクタオブジェクトの黄色い菱型を動かす操作を記録して.Adjustmentsにたどり着きました。

    ExcelVBAの環境があり、今回のようなExcelでも似たようなことができるもの、という条件ではありますが、今後の問題解決の参考になれば幸いです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 91.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • VBA

    1410questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。