- ベストアンサー
不特定多数のコントロールを発生させる方法
VBAなんですが、最悪VBでも構いません。 コーディングにより、Access中のレコードの数だけ、ラベルやコマンドボタンをフォーム上に作成したいのですが、どうすればいいのかわかりません。 レコードの数なので多数になる可能性が高いので、配列にしようと思っているのですが、コマンドボタンも含まれているため、そのクリックイベントも作らなければならないのです。(イベント内容は同じ。違いはインデックス番号の認識のみ) しかもVBAだとコントロールの配列が作れないので困っています。どうすればいいでしょうか? コントロールの追加にcreatecontrol関数を使うとフォーム名にcreateformを使わないといけないらしく、フォームを新しく作らないといけないみたいでイベントまでは埋め込めそうにありません(既存のフォーム名でするとデザインがどうとかこうとかでエラーが出ます)
- みんなの回答 (3)
- 専門家の回答
お礼
>テーブルに作成するコントロールのリストが作ってあるのかなと思い そんなものはないです。コントロールタイプは全てコマンドボタンおんりー結構です。 とりあえずコーディングでフォームを作ってコントロールを配置してイベントを埋め込むところまでは成功しました。 結局set myFrm = CreateFormを使ってフォームの新規作成をしました。これを使わないとフォームのメソッドが使用できないばかりか、モジュールセットもできないのでCreateEventproc関数が使えないため、非常に不便なので、やめました。既存のフォームを使うという方法はもう忘れてください。 あとはコントロールの配列をコーディングでどうやって作るかです。VBAはコントロールの配列が作れないので、何か良い方法はないでしょうか? 例え作れたとしてもクリックイベントでそのコマンドのインデックス番号をどうやって取得するのかが大問題です。 いっそのことコマンドの名前を数字にして後でそのコントロール名とかイベント名を参照してインデックス番号を取得・・・なんてできるのでしょうか?たしか既存の(目に見えて形となっている)(オブジェクト名を持っている)コントロールのメソッドを使用するのはかなり不可能だったような気がします。なのでタグもイベント名も拾えない気がします。 イベントが発生したときに自分がどのオブジェクトから呼ばれているイベントか知る方法ってありますか?あるいは上から何番目のコマンド(縦に同じコマンドがズラッと並んでいるイメージ)から呼ばれているかをイベント内部から知る方法ってありますか? VBなら同じイベント内容のコマンドを全て配列にしてまとめてクリックイベントにしてそのIndexを見ればプロシージャ1つで済みますが、VBAで似たような方法をする方法を教えてください。