• 締切済み

VBA オブジェクトのマウスアップ

エクセルで図形を移動したら余分な操作なくセルにフィットさせたいです。 オブジェクトでマウスアップイベントが使えたらいいのですが、無いようです。 いい方法はないでしょうか? 中途半端な案 1.枠線に合わせるを強制する。  →挿入や移動でセルに合わない時もあるのでNG?(そもそもなぜ合わないの?) 2.図形移動後、別の図形かセルが選択されるのに期待  →すべてのオブジェクトにonactionを設定   セルchangeイベントとオブジェクトonactionを使う。 3.フォームを全画面表示、透明化、フォームのマウスアップイベントを使う  →考えただけでも難易度が高すぎ。

みんなの回答

  • mdmp2
  • ベストアンサー率55% (438/787)
回答No.3

ALTキーを押しながら移動すると、枠線にくっつきますけど、それではだめなんですか?

tanakanono
質問者

お礼

はい。ダメなんです。アドインにして配布したので。

全文を見る
すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.2

期待されるイベントはありませんので 私だったら次のようにすると思います。 ・適当なイベントでシート上の図形全数の位置をテーブルに格納  (Workbook_SheetChangeイベントがいいかも) ・フロートなフォーム(UserForm1.Show vbModeless)に  『現在の図形位置を記憶』  『近くのセル位置に合わせる』 の2つのボタンを配置 ・『現在の図形位置を記憶』が押されたら、   シート上の図形全数の位置をテーブルに格納 ・『近くのセル位置に合わせる』が押されたら   (1)表示位置の変化した図形を特定   (2)これら特定された図形たちのみの表示位置を   一番近くのセル位置に移動し、   (3)シート上の図形全数の位置をテーブルに格納 都合、 セル位置に合わせたくない図形の場合は 任意位置に移動し、『現在の図形位置を記憶』ボタンを押下し。 セル位置に合わせたい図形の場合は場合は 任意位置に移動し、『近くのセル位置に合わせる』ボタンを押下します。

tanakanono
質問者

お礼

ご提案の方法だと2のほうが良いと思います。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

どこまで質問の意図に答えているか不安だが、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左上位置に移動する。 これだけでは、何ということはないので、どういう(場面で)使い方をするか疑問だが。

tanakanono
質問者

お礼

ActiveXを使うのもいいかもしれません。考えてみます。 やりたいことは、アドインでいろいろなことをしているうちの一つに、特定のファイルの場合に図形を配置、移動したら枠線に合わせたいです。 ユーザーは普段通りセル入力などができるのが理想です。 図形の座標をセル位置でデータ化してごにょごにょします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA API WM_KEYDOWN

    エクセル内のオブジェクトの移動を判定するため、マウスアップを検出しようと考えています。 GetAsyncKeyStateでできるのですが、エクセルが受け取るWM_KEYDOWNを受け取る方法はないのでしょうか? そもそもWindowsがイベント待ちで動いているのに、GetAsyncKeyStateだとループ処理で監視することになるので、すっきりしません。私だけでしょうか? ちなみに、新規に図形を作ったり、図形を移動したりしたときに処理したいですが、このイベントは準備されていないですよね?

  • 大量のオブジェクトで同様のイベント処理をしたい場合の記述

    Excel VBAでフォームなどに大量のオブジェクトを配置して、各々のオブジェクトで同様のイベントを処理したいのですが、まとめて記述する方法はあるのでしょうか。 ユーザーフォーム上に大量の数値入力ボックス(TextBoxオブジェクト)を配置して、全てのボックスに同様の入力値制限を課そうとして、コードが肥大化して困っています。どうかよろしくお願い致します。 例) Sub TextBox1_change() <プロシージャー> end sub Sub TextBox2_change() <プロシージャー> end sub ・・・・・・ Sub TextBox10_change() <プロシージャー> end sub (<プロシージャー>部分は共通)のように延々と記述しなくても済む方法はあるのでしょうか。

  • シートのクリックイベントは拾えないのか?

    ExcelのVBAに関する質問です。 さきほど「セルをクリック、またはダブルクリックしたときに○○したい」という質問に回答したのですが、「セルをクリックした」というイベントを拾う方法がわからず、ダブルクリックのパターンで回答しました。 Worksheetのイベントには BeforeDobuleClick や BeforeRightClick はあるのに Click や onClick というイベントがありません。オートシェイプなどのオブジェクトやフォーム上のオブジェクトには Click イベントがあるのですが、Worksheet になぜかありません。 これまでも同様のケースがあり、ネットで検索したりしたのですが、どれも SelectionChange で代用するものでした。それだと確かにマウスで別セルを選択したときにイベントが発生しますが、 ・キーボード操作でセルを移動してもイベントが発生する ・現在選択しているセルをクリックしてもイベントが発生しない と、厳密はマウスでクリックしたときと同じ動作になりません。 確か以前の質問で「あるセルをクリックするたびに、他のセルの値をカウントアップしたい」というようなものもありました。このような場合には、やはり Click に相当するようなイベントで処理したいです。 どうにかしてWorksheetでクリックイベントを拾うことはできないのでしょうか?

  • Wordでオブジェクトとテキストの一体化

    Word2003を使用しております。 テキスト中にオブジェクト(主に図形)を挿入した文書を作成します。 作成後、テキストを追加したり、削除するとテキストとオブジェクトがバラバラになってしまいフォームが崩れてしまいます。 そのたびにオブジェクトを移動させて成形する始末。 元来、テキストとオブジェクトは別のものですが、オブジェクトをテキストと同化(一体化?)することは可能なのでしょうか? 長年出来ないと思い込んで使用しておりますが、使いづらくてたまりません。 良い方法をご存じの方、是非ご教授願います。

  • 実行状態中にオブジェクトの配置、サイズ変更はできますか?

    ご質問させていただきます。 Visual Basic 2005 を使っています。 やりたいこととは、 実行状態のフォーム(GroupBoxオブジェクト等)にTextBoxや線/円オブジェクトを置いたり、 そのオブジェクトをマウスクリックで”選択して”縦横のサイズを変更したり、位置を変更したいのです。 (できればマウス右クリックでプロパティの変更なども) 大まかに言えば、 実行状態のフォームに「デザイン状態の操作」や「Excel上の図形描画の操作」と同じようなことができるのでしょうか? (ツールボックスからデザインフォーム上へのオブジェクトの配置、配置したオブジェクトに マウスクリックをしてのサイズ変更、コピー&ペースト処理など) はじめは、直線や四角形を描画して期待通りのことができるかと思いましたが、 やはり描画した後にその線を”つまむ”ことができませんでした。 ちなみに、VB2005ではLineやShape系はないので、VB2005 PowerPacks2.0 を入れることで、 VB6でのLineコントロールみたいな動きはできました。 良いアドバイスありましたらお願いいたします。

  • VBAにて、ユーザーフォーム上のマルチページ上に配置したテキストボック

    VBAにて、ユーザーフォーム上のマルチページ上に配置したテキストボックスの番号を取得したい 例えば、userform1のmultipage1上にtextbox10というオブジェクトがあるとします。 textbox10のchangeイベントにて、この10という番号を取得したいのですが、どのような構文でできるのでしょうか?

  • エクセルでの図に移動について

    エクセル2003です。テキストボックスや図形を移動する際、セルの枠線に沿ってしか移動できなくなりました。ただし、Altキー押しながらだとスムースに移動できます。 この動きって逆じゃないでしょうか? 宜しくお願いします。

  • EXCEL  一部のオブジェクトだけを固定したい

    お世話になっております。 EXCEL2000です。 http://okweb.jp/kotaeru.php3?q=249769 ある一部のオブジェクトだけを固定したいのです。 調べましたが、すべてのオブジェクトが固定されてしまう方法だけがわかったぐらいです。 以下の方法です。 まず、図形のオートシェイプの書式設定の「保護」でロックにチェックを入れます。次にメニューの「ツール」-「保護」で「シート」を選択します。そうすると「データ」「オブジェクト」「シナリオ」と表示されますので、オブジェクトにチェックを入れてください。 データにチェックを入れてしまうとロックされているデータのセルすべてが入力不可。 また列や行を削除や幅を変更させた時に図形の大きさを変えたくない場合は、オートシェイプの書式設定のプロパティで「セルに合わせて移動やサイズ変更しない」にチェック入れておけば、図の位置や大きさはそのまま。 おでも、あくまで一部のオブジェクトだけを固定するほうほうはありますか?

  • オブジェクトの位置関係の設定条件を保存したい。

    Excel2007を使っています。 オブジェクトの位置関係の設定条件をデフォルト設定として保存する方法があればご教授お願いします。 任意の挿入した図形のサイズを【セルに合わせて移動するがサイズは変更ない】という作成条件で挿入していきたいのです。また、【縦横比を固定する】もチェックが必ず入るようにしたいです。 現状、図形を作成するごとにいちいちプロパティを開きチェックを入れないさないといけないため、し忘れなども発生し、確認するのが大変面倒です。 右クリックでの【既定の図形に設定】で保存されるかと試しましたが、反映されないようです。 上記の要望を叶える良い方法があればよろしくお願い致します。

  • エクセルの図形描画のこと

    エクセルのあるシートに、オートシェイプの図形とテキストボックスの文字が無数に描画してあります。これらを全てまとめて、"セルに合わせて移動やサイズ変更をしない"に一括変更するにはどうすればいいでしょうか? 対象オブジェクトを全てセレクト状態にしてから、マウス右クリックで"オブジェクトの書式設定"を選択してみると、対象が多すぎるようで書式設定ウインドウが出てきませんでした。

このQ&Aのポイント
  • 粉体製造において凝集する問題に直面しています。特に凝集問題がある製品にはコバルトオキサイド(CoO)を添加していますが、この添加剤の詳細な物性を知りたいです。
  • コバルトオキサイドの粉体特性を把握することは、粉体の流動性や凝集力を予測するために重要です。例えば、添加剤の吸湿性などの物性を確認することで、最終製品の粉体特性を把握することができます。
  • 粉体の流動性や凝集力を予測するためには、コバルトオキサイドの物性だけでなく、他の添加剤の特性や製造条件なども考慮する必要があります。それによって、凝集問題を解決するための最適な方法を見つけることができます。
回答を見る

専門家に質問してみよう