• ベストアンサー

エクセルVBAの図形について

図形を使用するVBAをはじめて作成中ですが、わからないことがありましたので質問します。 (1)オートシェイプに独自のプロパティーを設定したいのですが良い方法はありますか? (便宜上、NAMEプロパティーで代用しておりますが複数のプロパティを設定したいのです) (2)ONACTIONプロパティに設定しているマクロに対し、 どの図形から実行されたのか知りたいのですが、良い方法はありますか? (3)ある図形からコネクトされている別の図形を特定する方法はありますか? どれかひとつへの回答でもかまいませんので教えてください。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

質問1 ShapeRangeコレクションを作成して、そのコレクションにプロパティを設定しては。     『ShapeRange』でVisual Basic のHelpの     『ShapeRange コレクション オブジェクト』を参照してみてください。 質問2 質問3    下記にサンプルを書いてみました。        OnAction でShowNameを呼び出し、図形の名前、コネクタの始点、終点をシートに書き出しています。    最後にOnActionを定義した図形の名前をメッセージボックスに出しています。 Sheet1のコードウインドウに貼り付け(Sheet1に図形がある) ↓ Sub OnActionTest()   Shapes(1).OnAction = "ShowName" End Sub 標準モジュールに貼り付け ↓ Public Sub ShowName()   Dim sp As Shape '図形   Dim ct As Integer 'カウンタ   Dim connStart As Shape 'コネクタの始点が接続する図形   Dim connEnd As Shape 'コネクタの終点が接続する図形   On Error Resume Next   For Each sp In ActiveSheet.Shapes     ct = ct + 1     Range("A" & ct) = sp.Name     Set connStart = sp.ConnectorFormat.BeginConnectedShape '質問(3)始点     Range("B" & ct) = connStart.Name     Set connEnd = sp.ConnectorFormat.EndConnectedShape '質問(3)終点     Range("C" & ct) = connEnd.Name   Next   MsgBox ActiveSheet.Shapes(Application.Caller).Name '質問(2)OnAction が定義された図形 End Sub

tamo
質問者

お礼

質問1については、とりあえずNAMEプロパティでやります。ちょっと格好が悪いぐらいで支障はないですからね。 質問2については無茶苦茶勉強になりました。早速使わせてもらいます。ヘルプにはきちんと載っているんですが、なかなか見つけられないものですね。いやホント助かりました。 サンプルコードまでつけていただいて、ほんとうにありがとうございました。また何かあったら質問しますのでよろしくお願いします。 ところで『普通のサラリーマンです。』のnishi6さん、結構EXCELマニアですね。(誉め言葉ですよ) ではまた。

tamo
質問者

補足

質問1は私の説明不足です。 独自のプロパティを設定したいとは、VBAで用意されているものではなく、新しいプロパティを作成したいという意味です。(上記ヘルプにはShapeRange コレクション オブジェクトを使用して”既存”のプロパティを設定するというよう項目しかみあたりませんでした。私の読み違いでしたらお手数ですが例をあげてください) 質問3の答えはバッチリです。(僕もこの答えには自力でたどりつけました。ついでに、どこにつながっているかを知りたいときはBeginConnectionSiteなどを使かえばよいことも…)

関連するQ&A

専門家に質問してみよう