- ベストアンサー
エクセルマクロでカギ線矢印コネクタでオートシェイプをつなぐ方法
- マクロを使用してエクセルのオートシェイプをカギ線矢印コネクタで接続する方法について説明します。
- 新人の方に向けて、プログラミング経験がない方でも分かりやすく手順を説明します。
- マクロの作成方法やボタンクリック時の質問処理についても解説します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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)
一応報告。 [vista/2007]でも動作確認しました。 あとは#2のコードで研究してみてください。 でわ、この辺で。
- end-u
- ベストアンサー率79% (496/625)
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 操作手順についても、大差ないと思いますが。
補足
ありがとうございます。早速試してみました。 try2()を試してみましたが、コネクタをつなぐ コマンドが実行されました。 もう一つ質問させていただきたいのですが、 コネクタをつないでくれるところまで オートシェイプをクリックしただけで自動でできないでしょうか? try()の方が自動で右端と左端をつないでくれるものだと 思うのですが、こちらは実行してみたところ エラーがでてしまいました。 .ConnectorFormat.BeginConnect .Parent.Shapes(x), 4 この文で処理が止まってしまいました・・・。 すみません、もしわかりましたら 回答お願いします。
お礼
できました!! 細かく教えていただきありがとうございました。 VBAの勉強を今後も続けていきます。 本当にありがとうございました!