Excel shape イベントに関する質問

このQ&Aのポイント
  • Excelのシートに配置されたshapeオブジェクトをダブルクリックすると、指定した関数を実行する方法を知りたい。
  • アクティブシートのセルに対するイベントではなく、shapeオブジェクトに対するイベントを設定したい。
  • Excel 2010では、shapeオブジェクトに対するイベントを設定する方法がわからない。独自のコンテキストメニュー追加もできないという記事を見た。どのように対応すれば良いか教えてほしい。
回答を見る
  • ベストアンサー

Excel shape イベント

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

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

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんにちは、No1です。 ごめんなさい、ちょっと意味が分からないです。 普通にShapeを選択して右クリックでテキストの編集や切り取り って出来ないのですか? また、「ある関数を動かす」というのはマクロの実行とは違うのでしょうか?

keeeent24
質問者

お礼

ありがとうございました。 なんとか自己解決はしましたが、本当にやりたいことにはたどり着けませんでした。

keeeent24
質問者

補足

ご返信ありがとうございます。 わかりづらい説明申し訳ありません。 今はプログラム開発をお客様向けで行っておりまして、、 なので、No1さんがおっしゃるように、もちろん右クリックでできます。しかし、お客様がより簡単に使いやすくするように、オブジェクト上でダブルクリックした際、編集用のフォームを表示するなどで、そのオブジェクトの編集ができるようにしたい、というのが目指すところです。 なので、ダブルクリックで、ある関数を動かす、すなわち、マクロ実行したいということです。

その他の回答 (2)

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

下記は似たような質問でしょう。 http://okwave.jp/qa/q3653505.html ーー そこのWendyさんの回答を借用(前半)して、できる範囲なら、できるでしょう。 Clickイベント相当のイベントしかできない、ということでしょう。 Wendyさんの回答を借用して Sub TestShape() ActiveSheet.Shapes(1).Delete 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 = "" .OnAction = "SubTest1" End With End Sub '-------------------------------- Sub SubTest1() 'MsgBox "SubTest1マクロが実行されました", 64 ActiveSheet.Shapes(1).Width = ActiveSheet.Shapes(1).Width * 1.1 End Sub クリックするごとに四角形が1.1倍になります。 '===== >名前を変えたり削除できるように クリックすると四角形を削除するのは Sub SubTest1() MsgBox "削除します" ActiveSheet.Shapes(1).Delete End Sub シートにオブジェクトを張り付けるのは、邪道扱いのように受け取ります。 MSでは、ユーザードームの上でやってほしいということかも。

keeeent24
質問者

お礼

ありがとうございます。 一応自己解決はしましたが、しっくりこない感じです。 おさわがせしました。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは 「ユーザーが任意で名前を変えたり削除」 対象は何ですか? Shapeにマクロを登録するのはダメなのですか?

keeeent24
質問者

補足

ご返信ありがとうござい。 対象はshapeオブジェクト自体です。 ダブルクリックした、shapeオブジェクトのテキストを編集したり、shapeオブジェクト自体を削除したいという意味です。 また、もちろん右クリックでの独自メニュー追加により、編集や削除を行うイベントを作るという仕様でも問題ないです。 OKwaveの使い方がわからず、返信が遅れてしまいました、すみません^^;

関連するQ&A

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

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

  • ダブルクリックイベント

    シート数がかなり多数のエクセルファイルがあるのですが、全てのシートにダブルクリックイベントを適用させたいと思っています。 Worksheet_BeforeDoubleClickのコードを、全シート分まとめて記述することは可能でしょうか?

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

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

  • Excelで動的にイベントを作成する方法 2

    Excelでシートにコマンドボタンを作成し、そのボタンにクリックイベントを追加したく、No.321427「Excelで動的にイベントを作成する方法」にあるようにやってみたのですが、実行時エラーが出ます。 ご存知の方がいらっしゃいましたら、ご回答お願いいたします。 'ボタン生成 Dim mn As OLEObject Dim nw_sht As Worksheet Dim cdMoj As CodeModule Dim Ln As Long Set mn = nw_sht.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=510, Top:=10, Height:=20, Width:=100) mn.Name = "メニューへ" mn.Object.Caption = "メニューへ" mn.Object.TakeFocusOnClick = False 'イベント追加 Set cdMoj = ThisWorkbook.VBProject.VBComponents(nw_sht.CodeName).CodeModule Ln = cdMoj.CreateEventProc("Click", mn.Name) cdMoj.InsertLines Ln + 1, " Load メニュー" cdMoj.InsertLines Ln + 2, " メニュー.Show" 'ここまで エラー:実行時エラー424 オブジェクトが必要です 環境:Excel2000 *えらー終了するとボタンは作成できていて、クリックイベントも機能しています。

  • Excel2007マクロでメモリが増加し続ける

    Excel2007でVBAでマクロを組み込んだところ、 クリックイベントが走る度に、仮想メモリが増加し続けるようになってしまいました。 シート上にActiveXコントロールを配置し、 ActiveXコントロールのクリックイベントプロシージャに VBAでマクロを組み込んでいます。 内部で使っているオブジェクトは、 きちんとNothingで解放しています。 マクロを組み込むと必ず発生する現象ではなく、 シート上に配置しているコントロールの数、 ブックのシート数、 モジュールの数、ステップ数、 イベントプロシージャの処理ステップ数、 などのオブジェクトの量が多くなると、 仮想メモリが増加し続けるという現象が起きるようです。 オブジェクトの数、サイズによっては、 1クリックで50Mくらいずつ増加することもあり、 すぐにメモリリークしてしまいます。 XP+Excel2007の環境でのみ発生します。 Vistaでは発生しません。 SPはそれぞれ、XP SP2、Excel 2007 SP1です。 なぜ、このような現象がおきるのでしょうか?

  • Excelの任意セル上に図形がのっているかどうか?

    Excel2002です。 シート上にライン(Shapeオブジェクト)を配置していますが、 このラインにセルが引っかかっているかどうかの判定は できますでしょうか? よろしくお願いします。

  • オートシェイプをクリックしてマクロを実行するには?

    EXCEL97です。 オートシェイプをクリックまたはダブルクリックされたことをひろってVBAが実行されるようにしたいのですができるのでしょうか。 セルであればワークシートのイベントでできるのですが図形でのやり方がわからず困っています。 ちなみに図形には直線、四角形(テキストも)、矢印などが対象になります。 すみませんがご教授お願いします。

  • Excelのセルをダブルクリックした時のマクロ

    BeforeDoubleClickイベントで、特定のセルをクリックした場合にマクロを実行する方法についての質問です。 例えば セルC1をダブルクリックするとマクロAが実行 セルC2ををダブルクリックするとマクロBが実行 セルC3ををダブルクリックするとマクロCが実行 と、複数のイベントにそれぞれのマクロを実行させたい場合はどうすればよいのでしょうか。 詳しい方がいましたらアドバイス頂けないでしょうかm(_ _ )m

  • クリックしたshapeを取得する方法

    エクセルVBAで、マクロを登録したShepeをクリックしたときに、そのShapeを取得する方法はありますでしょうか? 1つのワークシート上に、例えばShapes(1)、Shapes(2)があったとします。クリックしたShapeの色を変えたいというとき、Shapes(1)にはShapes(1)の色を変える内容を記述したマクロを、Shapes(2)にはShapes(2)の色を変える内容を記述したマクロを登録すればいいのですが、これをひとつのマクロで行いたいのです。Shapes(1)、Shapes(2)それぞれに同じマクロを登録し、マクロの記述の中でそのときクリックしたShapeを取得できれば、そのプロパティを変更することで可能なのですが、その方法がわかりません。 ご存知の方がいらっしゃいましたら教えてください。

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

    セルの選択した場所のとなりにオートシェイプを移動させるマクロを組みたいと思っています 見かけがまったく同じシートが4枚あり、そのシート全てに同じマクロを指定したいのですが、オートシェイプの名前の指定の仕方が分からなく困っています SelectionChangeイベントでオートシェイプ移動のマクロを動かしているので、同じ名前のボタンならよいのですが・・・ なにかよい方法はないでしょうか?

専門家に質問してみよう