Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10全般 : Excel 2016)
図形について
投稿日時: 21/05/26 23:40:31
投稿者: aSh998

図形の名前(nameプロパティ)は取得できてる図形通しを
コネクタで結びつけたいのですが、できません。
 
どのようにしたら良いか教えていただかますでしょうか。

回答
投稿日時: 21/05/27 06:33:54
投稿者: simple

ConnectorFormat.BeginConnect メソッドのヘルプにコードとともに説明があるので、
それで対応できます。
 
変数宣言を追加し、変数名をやや修正して再掲したものが下記。(ヘルプの例文を再掲

Sub test()      
    Dim ws          As Worksheet
    Dim s           As Shapes
    Dim firstRect   As Shape
    Dim secondRect  As Shape
    Dim c           As Shape
    
    Set ws = Worksheets(1)
    Set s = ws.Shapes
    Set firstRect = s.AddShape(msoShapeRectangle, 100, 50, 200, 100)
    Set secondRect = s.AddShape(msoShapeRectangle, 300, 300, 200, 100)
    Set c = s.AddConnector(msoConnectorStraight, 0, 0, 100, 100)
    With c.ConnectorFormat
        .BeginConnect ConnectedShape:=firstRect, ConnectionSite:=1
        .EndConnect ConnectedShape:=secondRect, ConnectionSite:=1
        c.RerouteConnections
    End With
End Sub

【補足】
(1)
・コネクターの位置(始点、終点)
・各図形のどこにコネクターを付けるか(ConnectionSite引数)
などはテキトー(暫定値)で構いません。
というのは、最後にあるConnectorFormat.RerouteConnections が、
すべてをよしなに取り計らってくれ、最短位置どうしをコネクターで
結んでくれるからです。
(2)
コネクターの種類は、
AddConnectorの第1引数で指定。
 
詳細は、ヘルプを見て下さい。

投稿日時: 21/05/27 23:05:09
投稿者: aSh998

ご回答ありがとうございます。
Set firstRect = s.AddShape(msoShapeRectangle, 100, 50, 200, 100)
で新規に図形を作成するのではなく
すでに図形があり、その図形を取得し、コネクタで結びたかったのですが
もう少し自身で考えてみます。

回答
投稿日時: 21/05/28 01:10:59
投稿者: simple

> 図形の名前(nameプロパティ)は取得できてる
のであれば、
その名前(仮に"Rectangle 1"とします)を使って、例えば、
    Set shp1 = ActiveSheet.Shapes("Rectangle 1")
のように図形を指定して下さい。他の図形も同じようにしてください。
ポイントはそこではなく、Connectorと思い、
ヘルプの例文をそのまま使ったのです。
そこは応用してもらいたかったですね。
 

Sub test()
    Dim ws    As Worksheet
    Dim shp1  As Shape
    Dim shp2  As Shape
    Dim c     As Shape
    
    Set ws = ActiveSheet
    Set shp1 = ws.Shapes("Rectangle 1")
    Set shp2 = ws.Shapes("Rectangle 2")
    Set c = ws.Shapes.AddConnector(msoConnectorStraight, 0, 0, 100, 100)
    With c.ConnectorFormat
        .BeginConnect ConnectedShape:=shp1, ConnectionSite:=1
        .EndConnect ConnectedShape:=shp2, ConnectionSite:=1
        c.RerouteConnections
    End With
End Sub
でいいですか?
Worksheetオブジェクトとか、図形の名前とか、適宜変更してくださいね。

回答
投稿日時: 21/05/28 08:38:35
投稿者: simple

ちょっと気になったのは、完成品のコードだけ求めていて、
注文したものと違うと言っているのかなと言う点。
提示されたたものをステップ実行して、各行のそれぞれの
機能を理解するのが先決だろうと思います。
それを助けるためのコメントもつけました。
形式にこだわってNG出すのはちょっとがっかりでした。
 
名前は取得していると言う記述はshapeオブジェクトは
作成できますと言うことだったら、先の記述は失礼でしたか。
二つのshapeを引数にしてConnectorを作成する
プロシージャーに仕立てると良いかも知れません。
いずれにせよ、あなたのニーズにあった完成品を作るのは
それはあなたの仕事でしょう。

トピックに返信