[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オートシェイプをマクロで』(CHISA)
最近、オートシェイプの質問ばかりしつこくてゴメンナサイ↓
オートシェイプの位置をユーザーフォームに表示させたくて、 Sheet1のモジュールにコードを作りました。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With UserForm1 .Show (0) .TextBox1 = ActiveSheet.Shapes("Rectangle 1").Top .TextBox2 = ActiveSheet.Shapes("Rectangle 1").Left .TextBox3 = ActiveSheet.Shapes("Rectangle 1").Width
End With End Sub
だけどこのコードだと、ワークシートを触らないと値が更新されません。 (当たり前ですが・・・)
Private Sub Worksheet_SelectionChange(ByVal Target As Range) の Worksheetの部分を Shapes に変えて、
Private Sub Shapes_SelectionChange(ByVal Target As Range)にしてみたんですけど やっぱりダメだったみたいで・・・
ワークシートじゃなくて、オートシェイプを動かしたときに ユーザーフォームが表示されて、値も表示・更新させるにはどうしたらいいですか?
どなたか教えてくださいm(__)m (CHISA)
>Private Sub Shapes_SelectionChange(ByVal Target As Range)にしてみたんですけど >やっぱりダメだったみたいで・・・
Shapeオブジェクトに公開されているイベントはありませんので、↑こういう記述が意味を持ちません。 いや、仮にイベントがあったとしても文法的にも間違っているかな??
これを実現するには、作成したオートシェイプに以下のマクロを登録しなければなりません。
新規ブックにて、以下の手順で操作してください。
1 サンプル オートシェイプの作成
まず、適当なシートに問題のオ−トシェイプを作成してください。 (図形は、オートシェイプであれば何でもかまいません)
2 ユーザーフォームの作成
次にVBEにて、CHISAさんのおっしゃるユーザーフォームを作成します。
ユーザーフォーム名 UserForm1
コントロールはテキストボックスを3つ用意します。
TextBox1、TextBox2、TextBox3
3 VBAコードの作成
標準モジュールに以下のコードをコピーしてください。
'=================================================================== Sub sample() Dim shp As Shape If TypeName(Application.Caller) = "String" Then Set shp = ActiveSheet.Shapes(Application.Caller) With UserForm1 .Show vbModeless .TextBox1.Text = shp.Top .TextBox2.Text = shp.Left .TextBox3.Text = shp.Width End With shp.Select Set shp = Nothing End If End Sub
5 オートシェイプにマクロを登録
「1」で作成したオートシェイプを選択してください。
選択した状態で 「右クリック」---「マクロの登録」とクリックしてください。
「マクロの登録」ダイアログが表示されます。
マクロ名一覧に「3」の「sample」が表示されているはずでから、 選択してOKボタンをクリックしてください。
これで準備完了です。
対象となる図形を選択してください。ユーザーフォームが表示され、位置と幅が表示されます。
と、こんな操作を行えば実現できます。
これを本来の仕様にどのように組み込めばよいか? は、全体像が見えていない私には、わかりませんが、 それは、質問者さんが検討してみてください。
ichinose@sampleコード訂正.7:55
ichinoseさんありがとうございます。 マクロの登録を忘れちゃってました。
しかも、どのオートシェイプでも選択できてすごいです!
ありがとうございましたm(__)m (CHISA)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.