• ベストアンサー

Excelのシート上のShapeにイベントは設定できる?

タイトル通りですが、Shapeにイベントを発生させることは できるのでしょうか? Click、MouseMove とかですが・・・ よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 私は、うまく言葉では説明できないので、以下のようなサンプルを作ってみました。 ".OnAction"  で設定させます。ただ、これが、Sheet1 などのローカルモジュールですと、 マクロ名は、それぞれのシートを指定しないといけません。 '標準モジュール Sub TestShape()   Dim x1 As Double, y1 As Double   Dim x2 As Double, y2 As Double   Dim dWidth As Double, dHeight As Double   'アクティブセルから、四角形の設定   With ActiveCell     x1 = .Left     y1 = .Top   End With   With ActiveCell.Offset(5, 3)     x2 = .Left     y2 = .Top   End With   dWidth = x2 - x1   dHeight = y2 - y1      With ActiveSheet.Shapes.AddShape(msoShapeRectangle, x1, y1, dWidth, dHeight)     .OnAction = "SubTest1"   End With End Sub '-------------------------------- Sub SubTest1()   MsgBox "SubTest1マクロが実行されました", 64 End Sub

wakaranai_kun
質問者

お礼

ありがとうございます。 OnActionですか。 メニューをつくるときと同じですね。 非常にたすかりました。 また、よろしくお願いします。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

表示ーツールバーー図形描画 オートシェイプの例えば四角をクリックして、シートに貼り付ける。 四角部分で右クリックーマクロの登録ー新規作成(か編集)で Sub 四角形1_Click() End Sub が現れます。 直線などでも同じです。 とりあえずClickイベントだけ認められているようです。 それ以上のイベントを作るのは、VBAを越えたウインドウプログラムとAPIとかの熟練スキルがいると思います。 私もわからないが雰囲気だけ下記で http://www.wisdomsoft.jp/dev/api/windows/032

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 せいぜい、右クリックして、マクロの登録で出来る範囲ぐらいだと思います。 言い換えると、Click イベントです。 それ以上のことは、オートシェイプ自体では、一応、無理だと考えたほうがよいようです。 後は、コントロールツール(Active X コントロール)から、Form で使う Image とかをシートに貼り付けるしかないと思います。

wakaranai_kun
質問者

お礼

ありがとうございます。 Clickが取れるとわかっただけでもたすかります。 できればオートシェイプでやりたいですね。 ついでになのですが、Shapeは実行時にVBAで配置し ていますがこの実行時にそのClickイベントも同時 に書き込むことは可能なのでしょうか?

関連するQ&A

  • Excel shape イベント

    お世話になります。 Excelマクロについて質問です。 バージョンは2010です。 Excelのあるシートにshapeオブジェクトがいくつも配置されており、そのある一つのshapeをダブルクリックしたときに、ある関数を動かす、といったイベントを設定したいのですが、やり方がわかりません。 BeforeDoubleClick等はありますが、それらはすべてアクティブシートのセルに対するイベントなため、私のやりたいことが満たされません。 私のやりたいこと… shapeをダブルクリックし、ユーザーが任意で名前を変えたり削除できるようにしたい。 また、右クリックによるコンテキストメニューの項目追加という方法でも問題ないのですが、excel2010での独自メニュー追加が不可能になったという記事を見ましたので、方法に困っています。 上記2つの方法で、わかる方、または他に良い方法がわかる方、ご返信お願いいたします…(;_;)

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

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

  • Excel マクロ登録されたシェイプをクリックした際にシェイプ名取得する方法

    エクセルのシートの毎行にオートシェイプを貼りつけて、それぞれにマクロを登録します(例えば「行削除」「行挿入」など) シェイプをクリックして起動されるマクロの中で、どのシェイプからマクロが起動されたか(もしくはクリックされたシェイプがあるセルアドレス)を取得する方法があればお教え下さい。よろしくお願いします。 シェイプ名が取得できればIntersectメソッドで行のアドレスが取得できると考えておりますが、色々調べてもどのようにしたらイベントが拾えるかわかりません。 フォームのコマンドボタンを使用すればClickイベントは発生するのですが、コマンドボタンでは行挿入(他のシートから行コピー&行の挿入)を行ったときに一緒に貼り付いてくれないので、可能であればシェイプで実現したいと思っています。

  • エクセルシート上でのイベントの発生について

    エクセルシート上で、マクロを起動させたいのですが、フォームや、ボタン等で、マクロを起動させるのでは無く、セルの変更やダブルクリックでイベントを発生させたり、マクロを起動させる事は、できるでしょうか?

  • エクセル オートシェイプ

    こんばんは! エクセルのオートシェイプについての質問です。 会社の稟議書を作成していて、上のほうに、オートシェイプで部長や課長のハンコを押す欄を作ろうと思ったのですが、うまくいきません・・・ エクセルで罫線を引いて、セル内に文字を入れるのは簡単なのですが、オートシェイプで作成する場合は、どのようにしたらよいでしょうか・・・ 四角形を挿入して、縦に二本オートシェイプで直線を引いて、横にも一本オートシェイプで直線を引いて、それをグループ化したまではよかったのですが、テキストをどのように入れたらよいのか分かりません・・・ 右クリックしても、テキスト追加できず、悩んでいます・・・ どなたかお分かりでしたら、お願いいたします。

  • ボタンとイベント

    Visual Basic 2008 Express Editionで、 ボタン1をクリックしたらイベント1が発生し、 もう一度ボタン1をクリックしたらイベント2が 発生するようにするには、どう書けばいいですか?

  • Excelのオートシェイプについて。

    Excelでグラフ作成し、そのグラフの中にオートシェイプの吹き出しでコメントをいくつか入れたのですが、グラフの外でクリックするとその吹き出しが消えてしまいます。で、また吹き出しがあったあたりをクリックすると、出てくるのですが、やっぱり外でクリックすると消えます。どうしてでしょうか? うまく説明できないんですが、状況はわかっていただけるでしょうか?

  • VB.NETでボタンクリックイベントの後に来るPage_Loadのようなイベントはありますか?

    タイトルのとおりなのですが、 VB.NETでボタンクリックイベントの後に来るPage_Loadのようなイベントはありますか? 教えてくださいーー

  • Excelのオートシェイプについて

    Excel2003を使用しています。 Excelで作表するときに使用する線は、線の太さが細かく設定できる オートシェイプを使うことが多いのですが、表にある全ての オートシェイプを一発で削除する方法ってあるのでしょうか? (今は右クリック→切り取りで削除しています。) あと、オートシェイプ(直線)に文字が重なった場合は、文字の方を 上に表示させたいのですが… 罫線だと文字がある部分は線が表示されませんが、それと同じような 設定は可能でしょうか? 以上2点、よろしくお願いします。

  • Excel95のイベントについて

    またまた、Excel95についてなのですが、 ワークブックをアクティブにしたときに発生するイベントは あるのでしょうか? 97以降のものなら Workbook_Activate でできたのですが、 95のやり方がわからなくて…。 それに代わるイベント・方法でも構いませんので、 ご教授願います。

専門家に質問してみよう