質問: シートのクリックイベントは拾えないのか? excelのvbaに関する質問です。 さきほど「セルをクリック、またはダブルクリックしたときに○○したい」という質問に回答したのですが、「セルをクリックした」というイベントを拾う方法がわからず、ダブルクリックのパターンで回答しました。 worksheetのイベントには beforedobuleclick や beforerightclick はあるのに click や onclick というイベントがありません。オートシェイプなどのオブジェクトやフォーム上のオブジェクトには click イベントがあるのですが、worksheet になぜかありません。 これまでも同様のケースがあり、ネットで検索したりしたのですが、どれも selectionchange で代用するものでした。それだと確かにマウスで別セルを選択したときにイベントが発生しますが、 ・キーボード操作でセルを移動してもイベントが発生する ・現在選択しているセルをクリックしてもイベントが発生しない と、厳密はマウスでクリックしたときと同じ動作になりません。 確か以前の質問で「あるセルをクリックするたびに、他のセルの値をカウントアップしたい」というようなものもありました。このような場合には、やはり click に相当するようなイベントで処理したいです。 どうにかしてworksheetでクリックイベントを拾うことはできないのでしょうか?
回答: kasouken様、 割り込み失礼します。 >helpにあったと思います。 まず、excelのraiseevent のhelpにあるサンプルコードは、excelのものではないようですね。動作は、vbでは確認できましたが、コードをvba用に手直ししてみましたが、全面的に変えないとexcelではできないようですね。私自身は、raiseevent 自体は理解しているつもりです。 単純に、class モジュールをオブジェクトとして、イベントを設け、その中に、raiseevent で、呼び出しコードを書けば済む内容だとも思えないのです。 ヘルプの中の、 #イベントが宣言されると、raiseevent ステートメントを使って、イベントを発行できます。 とは書かれていますが、それに該当するロジックが必要だと思うのです。 それを、どのようにして、セルのクリックに対するイベントを応用させるのでしょうか?私にはわかりません。私が、#2で書いたように、(左)クリックイベントは、application側で、selection として働くわけですね。 raiseevent というのは、イベントの中において、監視機能を働かせ、登録したイベントを発行させるというような機能だと思います。もちろん、イベントの代わりに、タイマーを動かして、ワークシートを監視状態にすることも可能だと思います。 しかし、その元のイベントを新たに作り、仮にタイマーで監視させるにしても、ワークシートのクリックに対するものは、私は思いつかないのです。いわゆる、mousedown(またはmouseup)の機能をワークシート上でイベントを発行させられるかどうかだと同じに考えています。私には、できそうにもありません。 時々、出てくる質問ですが、今まで、この問題の解答を見たことがありません。私は、最近はvbaに対して、あまり勉強はしておりませんが、これは、興味のある話です。 よろしかったら、質問者さんとともに教えてくださいませんか?