• ベストアンサー

VBAでイベント発生時に自分の呼ばれたコマンドを知る方法

イベントが発生したときに自分がどのオブジェクトから呼ばれているイベントか知る方法ってありますか?あるいは上から何番目のコマンド(縦に同じコマンドがズラッと並んでいるイメージ)から呼ばれているかをイベント内部から知る方法ってありますか? 今コーディングで新規フォームを作ってそこにレコード数だけコントロールを配置するというコーディングを考えております。 そのコマンドにクリックイベントも発生させたいので、コントロールを作成してイベントを埋め込むという作業まではできたのですが、不特定多数のコマンドボタンの作成設置方法に悩んでおります。 VBAではコントロールの配列はできないので、コントロールの名前などを全て変えて作らなければなりません。そこをどうするかで頭を悩ませています。 しかも後でどのコントロールがクリックされて呼ばれたのかも知りたいので、コントロール配列のindex番号みたいなものを取得しておく必要もありますが、何か良い方法はないでしょうか? いっそのことコマンドの名前を数字にして、後でそのコントロール名とかオブジェクトのメソッドを参照してインデックス番号を取得・・・みたいなことを考えてたのですが、たしか既存の(目に見えて形となっている)(オブジェクト名自体を持っている)コントロールのメソッドを使用するのはかなり不可能だったような気がするので、タグやオブジェクト名も拾えない気がします。 VBなら同じイベント内容のコマンドを全て配列にしてまとめてクリックイベントにしてそのIndexを見ればプロシージャ1つで済みますが、VBAで似たような方法をする方法を教えてください。 ループで回しながらオブジェクト名の違うコントロールを配置する方法は自分でなんとかやってみますのでindex番号の取得の方法だけお願いします。

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

  • ベストアンサー
  • potedora
  • ベストアンサー率47% (66/140)
回答No.1

VBAでコントロール配列はできませんが、 クラスモジュールを使用すれば擬似的に は実現可能です。 イベントを記述する場合はそちらの方が 簡単です。 参考URLにそのものがあります。

参考URL:
http://www.moug.net/skillup/opm/opm08-06.htm
saimon296
質問者

補足

ありがとうございます。少し勉強します。

その他の回答 (1)

  • jyuna
  • ベストアンサー率11% (1/9)
回答No.2

Me.ActiveControlで取れます

saimon296
質問者

お礼

できました。ありがとうございます。

関連するQ&A

  • 不特定多数のコントロールを発生させる方法

    VBAなんですが、最悪VBでも構いません。 コーディングにより、Access中のレコードの数だけ、ラベルやコマンドボタンをフォーム上に作成したいのですが、どうすればいいのかわかりません。 レコードの数なので多数になる可能性が高いので、配列にしようと思っているのですが、コマンドボタンも含まれているため、そのクリックイベントも作らなければならないのです。(イベント内容は同じ。違いはインデックス番号の認識のみ) しかもVBAだとコントロールの配列が作れないので困っています。どうすればいいでしょうか? コントロールの追加にcreatecontrol関数を使うとフォーム名にcreateformを使わないといけないらしく、フォームを新しく作らないといけないみたいでイベントまでは埋め込めそうにありません(既存のフォーム名でするとデザインがどうとかこうとかでエラーが出ます)

  • EXCEL2000(VBA) イベントの取得について

    EXCEL2000のVBAで多くのコマンドボタンを設置したのですが、 これは面倒だと思って、Collectionプロパティを使ってコード部では うまくボタンを配列で扱えるようになったのですが、問題はボタンが押された時のイベント時です。 VB6.0とかだとコマンドボタンのオブジェクト名自体に配列を付けることが出来て、 尚かつ、このボタンを押された時、配列の何番目のがクリックされたのかなど、 Private Sub xxxxx_Click(Index As Integer) のように出来たと思います。 VBA(EXCEL2000)でCollectionでとった配列の何番目のボタンを押されたなど、 配列の要素を取得することは可能でしょうか?

  • 実行時にコントロールのイベントの登録/解除を、イベントハンドラのメソッドをあらかじめ知っていないロジックから実施する方法

    実行時にコントロールのイベントの登録/解除を、イベントハンドラのメソッドをあらかじめ知っていないロジックから実施する方法 通常、実行時にコントロールにイベントの登録/解除 を行う際は。 AddHandler 対象コントロール.イベント名, AddressOf メソッド RemoveHandler 対象コントロール.イベント名, AddressOf メソッド や AddHandler 対象コントロール.イベント名, メソッドのデリゲート型 RemoveHandler 対象コントロール.イベント名, メソッドのデリゲート型 を行うと思います。 しかし、この方法では、これを実施するロジックが AddressOf メソッド や メソッドのデリゲート型 を知っていなければなりません。 そうではなく、それをあらかじめ、知っていなくても 対象コントロール から AddressOf メソッド や メソッドのデリゲート型 に該当するオブジェクトを取得するなどして、 実施できる方法を教えてください。 言語は、.NET系であれば。。 VB.NET, C#, C++のいづれかでもよいです。 できさえすればよいです。 J#とか、Delphi.NETとかマイナーなのは、厳しいです。 なお、C++でもしできるのであれば。 2003のマネージC++と、 2005のC++/CLIの両方について知りたいです。 以上、よろしくお願いします。

  • エクセル2010のvbaとコマンドボタンについて

    vbaで押されたコマンドボタンの (ActiveXコントロールのイメージやラベルなど) 名前を取得することはできますか? ActiveControl.NameはSheets(1)をつけると オブジェクトは、このプロパティまたはメゾットをサポートしていません とエラーが出て、Sheets(1).を取るとオブジェクトが必要です とエラーが出て上手くいきません フォームコントロールのボタンは右クリックできないので ActiveXコントロールのコマンドボタンを使用しています 回答お願いします

  • VBAのイベント処理について

    VBAのイベント処理について お世話になってます。現在、VBAでアプリケーションを作成しています。 1つのフォームに4つのテキストボックスと1つのボタンが配置されており、それぞれイベントが設定されています。 その中のテキストボックスに関するイベントなのですが、1つのテキストボックスに対してKeyPress、KeyDown、MouseUp、AfterUpdate、以上4つのイベントを作成します。 フォームに配置されている4つのテキストボックスすべてに、上記で示したイベントを作成する必要がありますが、各イベントにおける処理の内容はオブジェクト名が違うだけで全く同じです。 ひとつひとつイベントを作成していけば、処理目的は満たせそうですが、ソースがかなり長くなってしまいます。ひとつのオブジェクトに対してこれらの処理をひとまとめにする様な記述方法はありませんでしょうか?考え方だけでも教えていただければ幸いです。 質問が長くなってしまい申し訳ありません。回答宜しくお願い致します。

  • VBAのイベント

    Excel2000でVBAを使用しています。 シート上にグループ化されたオブジェクト (円とテキスト→円の中にテキストで番号が1~100まで入っています)が100個あり、 そのオブジェクトに名前("グル1"~"グル100") をつけています。 「そのオブジェクトの1つをシート上のどこかに移動し、 右クリックすると、次の番号が近くに飛んでくる」 と言うようなものを作りたいと思っていますが、 どうすればよいのでしょうか?

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

    Excelのシート上へコントロールを動的に生成,配置するVBAを作っています。とりあえず生成,配置は出来たのですが、そのコントロールに対し、イベントプロシージャを動的に作成するところが上手く出来ません。 Access VBAだと、「CreateEventProc」のキーワードでヘルプを調べると出てくるサンプルコードで動くのですが、同じものをExcel VBAで動かそうとするとエラーが出ます。 Excelでは動的にイベントプロシージャを作成できないのでしょうか?もし作成する方法をご存知の方いらっしゃいましたら、ご教授下さい。宜しくお願い致します。

  • access イベント名取得方法

    accessでフォーム、またはコントロールのイベント名の取得方法を教えてください。 フォーム、コントロール、レポートには、それぞれプロパティシートを持っていて、開くと、 「書式」「データ」「イベント」「その他」「すべて」の4つのタブに分かれています。 やりたいことは、この4つの中で「イベント」タブにある内容をイベント毎に取得したいのです。 <コーディング例> '全フォームループ For Each OBJ In CurrentProject.AllForms 'フォームを開く DoCmd.OpenForm OBJ.NAME, acDesign '****************************************************** '*** ここでフォームのイベントタブの内容を取得したい *** '****************************************************** '全コントロールに対してループ For Each CTL In Forms(OBJ.NAME).Controls '****************************************************** '*** ここでフォームのイベントタブの内容を取得したい *** '****************************************************** Next CTL Next OBJ   <取得結果の例> 1.クリック時:[イベントプロシージャ] 2.更新後処理:aaa() どなたかご教授お願いします。

  • PowerPoint VBAコマンドボタンでのマクロ

    PowerPointでVBAを使ったフォームを作製しました。 そのフォームを表示させるためマクロを書き、スライド上に コマンドボタンを配置させマクロを実行させたいと思っています。 ExcelのVBAですとコマンドボタンにマクロを割り当てるのは ツールバーのフォームのコマンドボタンで設置すると簡単ですが PowerPoint VBAですとコントロールツールボックスでのコマンド ボタンしかなくボタンにマクロを割り当てる方法が分かりません。 どなたかコマンドボタンにマクロを割り当てて実行する方法を 教えて下さい。 宜しくお願い致します。

  • AccessからExcelのコマンドボタンイベント

    Access2003 WinXP です。宜しくお願いします。 AccessのVBAでExcelファイルをコピーしたり開いたり テキストボックスの内容を書き換えたりしています。 Excelにてコントロールツールボックスから作成したコマンドボタンがあるのですが、このボタンのクリックイベントを AccessのVBAから実行させる方法を探しています。 ちなみに訳あって標準モジュールに書かれているわけではないので マクロを呼び出す方法は不可でした;; 標準モジュールに移すのは無しの方向で どなたか分かる方いらっしゃいましたらお願いします。

専門家に質問してみよう