• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロの登録を使って、オートシェイプどうしをカギ線矢印コネクタでつなぐ)

エクセルマクロでカギ線矢印コネクタでオートシェイプをつなぐ方法

このQ&Aのポイント
  • マクロを使用してエクセルのオートシェイプをカギ線矢印コネクタで接続する方法について説明します。
  • 新人の方に向けて、プログラミング経験がない方でも分かりやすく手順を説明します。
  • マクロの作成方法やボタンクリック時の質問処理についても解説します。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

Option Explicit Sub prep() 'テストシート作成   With Sheets.Add     .Rectangles.Add(100, 100, 100, 10).OnAction = "try"     .Rectangles.Add(300, 100, 100, 10).OnAction = "try"   End With End Sub Sub try()   Static x As String   Dim ws  As Worksheet   If Len(x) = 0 Then     If MsgBox("connect?", vbYesNo) = vbNo Then Exit Sub     x = Application.Caller   Else     Set ws = ActiveSheet     With ws.Shapes.AddConnector(msoConnectorElbow, 0, 0, 0, 0)       .Line.EndArrowheadStyle = msoArrowheadTriangle       With .ConnectorFormat         .BeginConnect ws.Shapes(x), 4         .EndConnect ws.Shapes(Application.Caller), 2       End With     End With     x = ""     Set ws = Nothing   End If End Sub 上記コードを新規WorkBookの標準モジュールに置いて、Sub prep()を実行してください。 その結果、追加されたシートのシェイプをクリックしてテストしてみてください。 それでエラーが出るようならエラーメッセージも教えてください。 ちなみにExcelのバージョンは何ですか? もし2007だったら動作確認してません。 ([win2000/xl2000][winXP/xl2003]で動作確認済み)

その他の回答 (2)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

一応報告。 [vista/2007]でも動作確認しました。 あとは#2のコードで研究してみてください。 でわ、この辺で。

sun-sky
質問者

お礼

できました!! 細かく教えていただきありがとうございました。 VBAの勉強を今後も続けていきます。 本当にありがとうございました!

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

Excelには、便利なマクロの記録機能があります。[ツール]-[マクロ]-[新しいマクロの記録...]です。 単純な『カギ線矢印コネクタでつながる、といったマクロ』については まずはこれを活用して調べる事をおすすめします。 さらに、本ケースはちょっと工夫しなければいけません。 後述の方法は、[Caller プロパティ]と[Static ステートメント]について知っておく必要があります。 詳しくはヘルプで調べてください。 『マクロの登録を使って』という事なので、 Application.Callerプロパティで、マクロ実行したシェイプの名前を取得できます。 これをStatic変数に受ける事で、1回目の実行か2回目の実行かを判断し、 同時に、コネクト元とコネクト先のシェイプの名前を取得して処理します。 Sub try()   Static x As String      If Len(x) = 0 Then     If MsgBox("connect?", vbYesNo) = vbNo Then Exit Sub     x = Application.Caller   Else     With ActiveSheet       With .Shapes.AddConnector(msoConnectorElbow, 0, 0, 0, 0)         .Line.EndArrowheadStyle = msoArrowheadTriangle         .ConnectorFormat.BeginConnect .Parent.Shapes(x), 4         .ConnectorFormat.EndConnect .Parent.Shapes(Application.Caller), 2       End With     End With     x = ""   End If End Sub 別案で、Excel自体の機能を活用する方法ならもっと簡単です。 Sub try2()   If MsgBox("connect?", vbYesNo) = vbNo Then Exit Sub   Application.CommandBars.FindControl(ID:=2642).accDoDefaultAction End Sub 操作手順についても、大差ないと思いますが。

sun-sky
質問者

補足

ありがとうございます。早速試してみました。 try2()を試してみましたが、コネクタをつなぐ コマンドが実行されました。 もう一つ質問させていただきたいのですが、 コネクタをつないでくれるところまで オートシェイプをクリックしただけで自動でできないでしょうか? try()の方が自動で右端と左端をつないでくれるものだと 思うのですが、こちらは実行してみたところ エラーがでてしまいました。 .ConnectorFormat.BeginConnect .Parent.Shapes(x), 4 この文で処理が止まってしまいました・・・。 すみません、もしわかりましたら 回答お願いします。

関連するQ&A