- 締切済み
VBA オブジェクトのマウスアップ
エクセルで図形を移動したら余分な操作なくセルにフィットさせたいです。 オブジェクトでマウスアップイベントが使えたらいいのですが、無いようです。 いい方法はないでしょうか? 中途半端な案 1.枠線に合わせるを強制する。 →挿入や移動でセルに合わない時もあるのでNG?(そもそもなぜ合わないの?) 2.図形移動後、別の図形かセルが選択されるのに期待 →すべてのオブジェクトにonactionを設定 セルchangeイベントとオブジェクトonactionを使う。 3.フォームを全画面表示、透明化、フォームのマウスアップイベントを使う →考えただけでも難易度が高すぎ。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mdmp2
- ベストアンサー率55% (438/787)
ALTキーを押しながら移動すると、枠線にくっつきますけど、それではだめなんですか?
- HohoPapa
- ベストアンサー率65% (455/693)
期待されるイベントはありませんので 私だったら次のようにすると思います。 ・適当なイベントでシート上の図形全数の位置をテーブルに格納 (Workbook_SheetChangeイベントがいいかも) ・フロートなフォーム(UserForm1.Show vbModeless)に 『現在の図形位置を記憶』 『近くのセル位置に合わせる』 の2つのボタンを配置 ・『現在の図形位置を記憶』が押されたら、 シート上の図形全数の位置をテーブルに格納 ・『近くのセル位置に合わせる』が押されたら (1)表示位置の変化した図形を特定 (2)これら特定された図形たちのみの表示位置を 一番近くのセル位置に移動し、 (3)シート上の図形全数の位置をテーブルに格納 都合、 セル位置に合わせたくない図形の場合は 任意位置に移動し、『現在の図形位置を記憶』ボタンを押下し。 セル位置に合わせたい図形の場合は場合は 任意位置に移動し、『近くのセル位置に合わせる』ボタンを押下します。
お礼
ご提案の方法だと2のほうが良いと思います。 ありがとうございます。
- imogasi
- ベストアンサー率27% (4737/17069)
どこまで質問の意図に答えているか不安だが、WEB記事を参考にして Sheet1にコントロールImage1を貼り付ける。 そしてSheet1のImage1のイベントでMouseMoveを選び Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) ’MsgBox "C3に移動" ' 図形の現在の図の位置を取得する With Sheets("Sheet1").Shapes("Image1") currTop = Cells(3, 3).Top currLeft = Cells(3, 3).Left End With ' 図形の現在の位置を上に移動する ' Top位置を小さくする With Sheets("Sheet1").Shapes("Image1") .Top = currTop .Left = currLeft End With End Sub これでデザインモードを脱して、 シートのImage1の上をMouseで動かすと、上記では、セルC3左上位置に移動する。 これだけでは、何ということはないので、どういう(場面で)使い方をするか疑問だが。
お礼
ActiveXを使うのもいいかもしれません。考えてみます。 やりたいことは、アドインでいろいろなことをしているうちの一つに、特定のファイルの場合に図形を配置、移動したら枠線に合わせたいです。 ユーザーは普段通りセル入力などができるのが理想です。 図形の座標をセル位置でデータ化してごにょごにょします。
お礼
はい。ダメなんです。アドインにして配布したので。