解決済み

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

  • すぐに回答を!
  • 質問No.974578
  • 閲覧数470
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 67% (60/89)

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

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

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

コントロールの追加にcreatecontrol関数を使うとフォーム名にcreateformを使わないといけないらしく、フォームを新しく作らないといけないみたいでイベントまでは埋め込めそうにありません(既存のフォーム名でするとデザインがどうとかこうとかでエラーが出ます)
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1

ベストアンサー率 100% (1/1)

興味を持ったのでちょっとやってみました
フォームはデザインモードで開いておかないと駄目でした
(別の方法もあると思うんですが)

レコードの数だけ とありましたので
テーブルに作成するコントロールのリストが作ってあるのかな と思い
テーブルの先頭から終端までループしてます。
テーブルの"コントロールタイプ"は数値型で設定しました。
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
お礼コメント
saimon296

お礼率 67% (60/89)

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

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


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


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

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

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

VBなら同じイベント内容のコマンドを全て配列にしてまとめてクリックイベントにしてそのIndexを見ればプロシージャ1つで済みますが、VBAで似たような方法をする方法を教えてください。
投稿日時 - 2004-08-26 01:23:05
OKWAVE 20th Be MORE ありがとうをカタチに

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 36% (95/259)

クラスを使っては?
なんか問題あるんですか?
補足コメント
saimon296

お礼率 67% (60/89)

よければそのクラスを使ったやり方教えてください。
投稿日時 - 2004-10-07 07:42:21
お礼コメント
saimon296

お礼率 67% (60/89)

実はクラスを使ったことがないので使い方がよくわかりません。
投稿日時 - 2004-10-05 07:39:38
  • 回答No.2

ベストアンサー率 100% (1/1)

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

お礼率 67% (60/89)

ありがとうございます。少し勉強します。
投稿日時 - 2004-10-05 07:38:02
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ