
今年入社した新人で、コンピュータ系の会社に勤めてます。
プログラミング経験は全くないので細かく教えていただきたいです。
エクセルのマクロを使って、以下のような処理をしたいと
思っています。
エクセルシート上に長方形のオートシェイプが何個かあります。
(バーのような細いものです。)
それをクリックすると「他の図形とコネクタ線でつなぎますか?」と
いう質問がでて、「はい」を選択します。
そして他のつなぎたいオートシェイプをクリックすると、
その元の図形の右端とつなぎたい図形の左端がカギ線矢印コネクタでつながる、といったマクロを作りたいです。
一応msgboxまではできていますが、つなぐための文がわかりません。
Sub AutoShape_Connect()
If MsgBox ("他の図形とコネクタ線でつなぎますか?" ,vbYesNo + vbQuestion = vbYes then
うまく伝わっていますでしょうか?
ぜひよろしくお願いします。
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]で動作確認済み)
No.3
- 回答日時:
一応報告。
[vista/2007]でも動作確認しました。
あとは#2のコードで研究してみてください。
でわ、この辺で。
できました!!
細かく教えていただきありがとうございました。
VBAの勉強を今後も続けていきます。
本当にありがとうございました!
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
操作手順についても、大差ないと思いますが。
この回答への補足
ありがとうございます。早速試してみました。
try2()を試してみましたが、コネクタをつなぐ
コマンドが実行されました。
もう一つ質問させていただきたいのですが、
コネクタをつないでくれるところまで
オートシェイプをクリックしただけで自動でできないでしょうか?
try()の方が自動で右端と左端をつないでくれるものだと
思うのですが、こちらは実行してみたところ
エラーがでてしまいました。
.ConnectorFormat.BeginConnect .Parent.Shapes(x), 4
この文で処理が止まってしまいました・・・。
すみません、もしわかりましたら
回答お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
一つのTeratermのマクロで複数...
-
ファイルが見つからない時、ス...
-
メッセージボックスのOKボタ...
-
ExcelのVBA。public変数の値が...
-
Excel_マクロ_現在開いているシ...
-
エクセルに張り付けた写真のフ...
-
Excel VBAからAccessマクロを実...
-
ExcelVBAの繰り返し処理でwebク...
-
マクロで待機時間を作りたい
-
Excel マクロ VBA プロシー...
-
ExcelのマクロをWSHから実行さ...
-
TERA TERMを隠す方法
-
マクロ実行時、ユーザーフォー...
-
UWLSの記録でマクロを作成し使...
-
Excel・Word リサーチ機能を無...
-
マクロ実行時、自動で背景色を...
-
Excel マクロでShearePoint先の...
-
excelのマクロで元に戻す方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の列が0表示の場...
-
特定のPCだけ動作しないVBAマク...
-
メッセージボックスのOKボタ...
-
Excel_マクロ_現在開いているシ...
-
一つのTeratermのマクロで複数...
-
マクロの連続印刷が突然不可能...
-
ExcelのVBA。public変数の値が...
-
Excel マクロ VBA プロシー...
-
Excel・Word リサーチ機能を無...
-
エクセルに張り付けた写真のフ...
-
Excelのセル値に基づいて図形の...
-
TERA TERMを隠す方法
-
マクロ実行時エラー
-
ExcelVBAでPDFを閉じるソース
-
wordを起動した際に特定のペー...
-
特定文字のある行の前に空白行...
-
Excel マクロでShearePoint先の...
-
エクセルで縦に並んだデータを...
-
マクロ実行時、ユーザーフォー...
-
ソース内の行末に\\
おすすめ情報