dポイントプレゼントキャンペーン実施中!

VBAなんですが、最悪VBでも構いません。
コーディングにより、Access中のレコードの数だけ、ラベルやコマンドボタンをフォーム上に作成したいのですが、どうすればいいのかわかりません。

レコードの数なので多数になる可能性が高いので、配列にしようと思っているのですが、コマンドボタンも含まれているため、そのクリックイベントも作らなければならないのです。(イベント内容は同じ。違いはインデックス番号の認識のみ)

しかもVBAだとコントロールの配列が作れないので困っています。どうすればいいでしょうか?

コントロールの追加にcreatecontrol関数を使うとフォーム名にcreateformを使わないといけないらしく、フォームを新しく作らないといけないみたいでイベントまでは埋め込めそうにありません(既存のフォーム名でするとデザインがどうとかこうとかでエラーが出ます)

A 回答 (3件)

興味を持ったのでちょっとやってみました


フォームはデザインモードで開いておかないと駄目でした
(別の方法もあると思うんですが)

レコードの数だけ とありましたので
テーブルに作成するコントロールのリストが作ってあるのかな と思い
テーブルの先頭から終端までループしてます。
テーブルの"コントロールタイプ"は数値型で設定しました。
acCommandButton のような定数はそのまま使えなかったです。

そのクリックイベントも ~ <イベントの作り方は どうしても分かりませんでした。

DoCmd.OpenForm "フォーム1", acDesign

Dim db As database
Dim rs As Recordset
Dim Ctrl As Control

Set db = CurrentDb
Set rs = db.OpenRecordset("テーブル1", dbReadOnly)

Do Until rs.EOF = True
Set Ctrl = CreateControl("フォーム1", rs![コントロールタイプ])
Ctrl.Name = rs![コントロール名]
Set Ctrl = Nothing
rs.MoveNext
Loop

DoCmd.Close acForm, "フォーム1", acSaveYes


以下 参考までに

acLabel ラベル 100
acRectangle 四角形コントロール 101
acLine 直線コントロール 102
acImage イメージ コントロール 103
acCommandButton コマンド ボタン 104
acOptionButton オプション ボタン 105
acCheckBox チェック ボックス 106
acOptionGroup オプション グループ 107
acBoundObjectFrame 連結オブジェクト フレーム 108
acTextBox テキスト ボックス 109
acListBox リスト ボックス 110
acComboBox コンボ ボックス 111
acSubform サブフォーム 112
acObjectFrame 非連結オブジェクト フレーム 114
acPage Pageオブジェクト 124
acPageBreak 改ページ コントロール 118
acCustomControl ActiveX コントロール 119
acToggleButton トグル ボタン 122
acTabCtl タブ コントロール 123
    • good
    • 0
この回答へのお礼

>テーブルに作成するコントロールのリストが作ってあるのかなと思い

そんなものはないです。コントロールタイプは全てコマンドボタンおんりー結構です。


とりあえずコーディングでフォームを作ってコントロールを配置してイベントを埋め込むところまでは成功しました。
結局set myFrm = CreateFormを使ってフォームの新規作成をしました。これを使わないとフォームのメソッドが使用できないばかりか、モジュールセットもできないのでCreateEventproc関数が使えないため、非常に不便なので、やめました。既存のフォームを使うという方法はもう忘れてください。


あとはコントロールの配列をコーディングでどうやって作るかです。VBAはコントロールの配列が作れないので、何か良い方法はないでしょうか?
例え作れたとしてもクリックイベントでそのコマンドのインデックス番号をどうやって取得するのかが大問題です。

いっそのことコマンドの名前を数字にして後でそのコントロール名とかイベント名を参照してインデックス番号を取得・・・なんてできるのでしょうか?たしか既存の(目に見えて形となっている)(オブジェクト名を持っている)コントロールのメソッドを使用するのはかなり不可能だったような気がします。なのでタグもイベント名も拾えない気がします。

イベントが発生したときに自分がどのオブジェクトから呼ばれているイベントか知る方法ってありますか?あるいは上から何番目のコマンド(縦に同じコマンドがズラッと並んでいるイメージ)から呼ばれているかをイベント内部から知る方法ってありますか?

VBなら同じイベント内容のコマンドを全て配列にしてまとめてクリックイベントにしてそのIndexを見ればプロシージャ1つで済みますが、VBAで似たような方法をする方法を教えてください。

お礼日時:2004/08/26 01:23

クラスを使っては?


なんか問題あるんですか?

この回答への補足

よければそのクラスを使ったやり方教えてください。

補足日時:2004/10/07 07:42
    • good
    • 0
この回答へのお礼

実はクラスを使ったことがないので使い方がよくわかりません。

お礼日時:2004/10/05 07:39

こんにちはー


ぶっちゃけ、難しくて私の手には負えません
擬似コントロール配列という手法があるようです。
URL貼っておきますね。

参考URL:http://www.h3.dion.ne.jp/~sakatsu/Breakthrough_P …

この回答への補足

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

補足日時:2004/10/05 07:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!