• 締切済み

VBAでコントロールを動的に配置する方法

VBAでコントロールを動的に配置する方法を教えて下さい。 フォームに n組のチェックボックスとテキストボックスを横方向に動的配置し、標準モジュールからチェックボックスを チェックボックス(x) x=1~n のように配列のような制御したいのです。 画像で見て頂くと、チェックボックスとテキストボックスが n によって縦方向に追加されるイメージです。 どなたか、お知恵を貸してください。

みんなの回答

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

私もあらかじめ作っておいてvisibleのTRUE/FALSEでやることをお勧めしますが どうしてもというならばこんな感じでしょうか。 エラー処理等一切行っていないサンプルです。 Sub UserForm_Initialize()   n = 5   For i = 1 To n     Set myCheckBox = Me.Controls.Add("Forms.CheckBox.1")     With myCheckBox       .Height = 20       .Width = 20       .Left = 10       .Top = (i - 1) * .Height + 10       .Caption = ""     End With     Set myTextBox = Me.Controls.Add("Forms.TextBox.1")     With myTextBox       .Height = 20       .Width = 80       .Left = 30       .Top = (i - 1) * .Height + 10     End With   Next i End Sub

masnoske
質問者

お礼

ご回答ありがとうございます。 教えて頂いた方法を改良して、Nameプロパティに連番を設定してみました。 文字列処理が必要ですが、Nameプロパティを配列番号のように使用できるようになりました。

  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.1

あの・・・複雑に考えなくても、ほとんどのオブジェクトには .visibleプロパティがあって、そいつをTrue/Falseに設定することで 表示が見え隠れします。たとえば textbox1.visible=False textbox2.visible=True と、ダイアログを.Showする前に設定すれば、テキストボックス1は 見えなくなりますし、テキストボックス2は見えるようになります。 この辺は、VBAでもVBでも同じような動きをしますので、こちらを 参考にしていただくといいかと思います。 http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard17.htm

masnoske
質問者

お礼

ご回答ありがとうございます。 最大数があらかじめ分かっているときは、良い方法ですね。 今後の参考にさせて頂きます。

関連するQ&A

  • VBAのコントロールについて

    EXCEL VBAでテキストボックスやラベル等の文字表示位置 で、横方向の右、真中、左はプロパティで設定できますが、 縦方向はどのようにすれば出来るのでしょうか。

  • EXCELのVBAについて

    エクセルのVBAでユーザーフォームに作ったテキストボックスに入力した値を、コマンドボタンによる「実行」とともに別に作った標準モジュールの変数として代入するにはどうすれば良いでしょうか? 具体的な流れは、 マクロ実行  ↓ ユーザーフォーム出現  ↓ テキストボックスに数字を代入→「実行」  ↓ 変数を代入された標準モジュールによる処理完了 というものです。 ご教授お待ちしております。

  • VBAについての全般的な初心者の質問です

    VBAについての疑問です、宜しくお願いします。 VBAのフォームをユーザフォームから作成しました。 ボタン、テキストボックス、コンボボックス等を貼り付けて、コードを見てみると、 ボタン、テキストボックス、コンボボックスのイベントが発生したときのみのコードしか見えません。 複数のフォーム(仮にA、B、Cとします)を作成すると各フォームの名前がオブジェクト名となって いました。 疑問点1:全体を合わせたものが、標準モジュールというものになるのでしょうか。       最初のオブジェクト作成時には、標準モジュールとユーザーモジュールのどちらを選択す       るのでしょうか。また、両者は何がどう違って、どのように使い分けるのでしょうか。       また、オブジェクト、モジュール、プロシジャとの関係はどうなのでしょうか。 疑問点2:各オブジェクト間で共通で定義されるグローバル変数、配列みたいなものは、一体、どこ       で宣言してやるのでしょうか。       単にボタンとかテキストボックスのイベント発生文前に書いてやるだけでよいのでしょう       か。       各オブジェクト間で共通で呼び出したいサブルーチン、メソッドは何処に書いてやれば       よいのでしょうか。(そのような呼び出し方が許されているという前提での質問です。) 疑問点3:フォーム自身を作成した(宣言した)文(コード)、フォームに貼り付けた、ボタン、テキスト       ボックス、コンボボックスのAdd文(コード)、また、例えば、これらを着色した文(コード)等       を見ることは出来ないのでしょうか。       フォーム自身をInitializeする必要のある場合とは、どのような場合でしょうか。       この場合は、フォーム(オブジェクト)の名前に関係なく、「Private Sub UserForm_Initialize()」でなくてはならないのでしょうか。 フォーム自身のスクロールバー等の設定は一体何処に書いてやればいいのでしょうか。 プロパティからの設定しか許されてないのでしょうか。 疑問点4:Micro Script Editorにはそれが書かれているようですが、何故かHTMLで書かれていま       す。       何故VBAで書かれていないのでしょうか。       コントロールは表示されますが、フォームを呼び出すツールとか、メニューが何処にも       見当たりません。 以上長文ですが、宜しくお願い致します。

  • VBAにてコントロールを引数にしたい

    VBAの処理にて、 コントロールを引数にしたいのですができますか? 以下のようなことがしたいです。 A,Bフォーム C,Dテキストボックスがあり、 フォーム名とテキストボックス名を渡し 初期値を設定したい・・・。

  • テキストボックスの書式について

    Access97を使用しています。レベルはかなり低い初心者です。 「フォーム」のテキストボックスに単語や文章を入力し、「レポート」で出力するのですが、 句読点が行頭に来たり、問答無用で上配置になったりとかなり見栄えが悪くなってしまっています。 「フォーム」は入力するだけなので何とかガマンするとしても、 「レポート」のテキストボックスで、禁則処理や文字配置などの設定はできないものでしょうか。 横方向の配置はツールバーで簡単に修正できるのですが、縦方向の修正方法がわかりません。 そういえばWord97のテキストボックスも縦配列はできなかったような気が…Excelは「プロパティ」で設定できたけど。 詳しい方、お返事お願いします。

  • vba なのですが...

    EXCEL の VBA です ActiveX コントロールで テキストボックス があります その、テキストボックス のLostFocus時のイベントなんですが、 標準モジュールで書かれているソースを直接呼びたいです Private Sub TextBox1_LostFocus() から、callするのではなく、 直接 呼び出す方法はあるのでしょうか? おしえてください

  • Access2002のVBAについて教えてください。

    Access2002のVBAについて教えてください。 標準モジュールの中にフォームの中のリストボックスにデータをAddnewしたいのですが、フォームが見つからないと表示されます。 例: フォーム名:Menu リストボックス名:リスト11 というような場合どのようにすればAddnewできますでしょうか。 宜しくお願いします。

  • ACCESS フォームの詳細セクションのコントロールを全て非連結で作ろ

    ACCESS フォームの詳細セクションのコントロールを全て非連結で作ろうとしています。 レコードセットに連結していれば、詳細セクションにはレコード件数分の行が自動的に生成され、データのセットも勝手に行われますが、非連結なので、自分で(VBAで)制御する方法を知りたいです。 行にはテキストボックスだけでなくコマンドボタンやチェックボックスも配置します。 ・VBAで行を作ってそこのテキストボックスに任意の値をセットする方法 ・VBAで行にあるオブジェクトの値等を参照する方法 以上を教えていただけませんでしょうか? (そのようなサイトがあれば、それも教えていただきたいです)

  • VBAプログラミング フォール間の配列受け渡しにつ

    いつもお世話になります。 フォーム1でテキストに入力した数値(文字ですが)をコマンドボタンを押して、標準モジュールに 受け渡した後、その標準モジュールでフォーム2をShowして表示させたとき、フォーム2のテキストに フォーム1の数値を移す方法はあるでしょうか・・。 *テキストだけじゃなく、チェックボタンの可否やラベルのcaptionなどいろいろです。 シートのセルに一度落として、フォーム2のテキストにもってくるのもいいのでしょうけど、それはしたくないです。また、そのもってくる数値が配列でも可能ですか? プロパティーGet、Letを見たのですが、いまいちわかりやすいのがなくて・・。 あとPublicとかでマクロ動かす時に、マクロ名としてみえたくないです。 以前悩み、解決なされた経験者の方、プロフェッショナルの方のアドバイスいただけますと 幸いです。 フォーム1からフォーム2に直接移すのでもOKです。ただ、フォーム1からもってきたデーターを モジュールでいろいろ加工し、そしてフォームへ返すって言うやり方がいいので、こういう質問にさせていただきました。 宜しくお願い致します。

  • VBA フォームに入力された数値を検索条件としたい

    ど素人ですので、よろしくお願いいたします。 VBAでユーザーフォームのテキストボックスに入力された数値○○~○○という条件でエクセルのデータをフィルターをかけて検索する構文を書きたいのですが、フォームのコードと標準モジュールのコードをどう繋げたらよいのかわかりません。よろしくお願いいたします。 以下が途中まで書いた構文です。 モジュールコード Sub 抽出() Range("a4").AutoFilter field:=1, Criteria1:=">=■1", _ operator:=xlAnd, Criteria2:="<■2" End Sub フォームコード Private Sub 実行_Click() ■1(○○以上の数値が入るテキストボックスの構文) ■2(○○未満の数値が入るテキストボックスの構文) End Sub 全く違っているのかも知れませんが、フォームは無視してモジュールの■に数値を直接入れると正しく検索します。

専門家に質問してみよう