• ベストアンサー

Forms( )の使い方を教えて下さい。

Forms()の使い方が良く分かりません。 1つのフォームから複数のフォームを簡略して操作したいのですが、 Forms(?)の?の部分が分かりません。インデックス番号?名称? (例) For i = 0 To 4 Forms(i).Label1.Caption = "AAA" Next i Forms(?)の?は作成した順番だと思っていましたが、違いました。 各フォーム?の部分の調べ方と変更方法が有りましたらご教授願います。

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

  • ベストアンサー
回答No.3

MSDNでは下記のように解説されているので、Loadされた順番です。 また、LoadしてないFormはFormsに含まれないようです。 (例) Load Form1 Load Form2 Load Form3 とした場合、Forms(2)はForm3を指します。 Formsコレクションは、アプリケーションにロードされている各フォームを表す要素を持つコレクションです。 Forms コレクションのプロパティは、コレクション上の要素の数を指定する Count プロパティだけです。 Forms コレクションを使って、アプリケーションにロードされているすべてのフォームを参照することができます。 このコレクションでは、どこからでも参照できる組み込み変数 Forms が使用できます。 Forms(index) は、Form クラスの引数として関数に渡すことができます。

mmac
質問者

お礼

回答有難うございます。 >MSDNでは下記のように解説されているので、Loadされた順番です。 >また、LoadしてないFormはFormsに含まれないようです。 なるほど、Loadされた順番なんですね。 Countした時に数が合わなかったりForms(?)の?順序が違うのはこのためでした。 分かりやすい回答有難うございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

バージョンを書かないと。 VB.NETかVB6.0か。 VB6らしいが。コントロール配列のことでは。 ただしVB6準拠のVBAでも使えない。 Googleで「コントロール配列」で照会して勉強のこと。たくさん記事が出る。

mmac
質問者

お礼

回答有難うございます。 失礼しました VB6.0です。 (例)の場合 For Each の方が適切でした^^; コントロール配列を勉強中にForms()でつまづきました。 もう少し勉強してみます。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

VB6.0で良いのでしょうか? 例えばこんな感じの事? Dim f As Form For Each f In Forms f.Label1.Caption = "AAA" Next

mmac
質問者

お礼

回答有難うございます。 失礼しました VB6.0です。 (例)の場合 For Each の方が適切でした^^; Forms()の使い方も分かりましたらお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Formsで簡略化

    Visual Basic 6.0 前回Controlsで、コードを簡略する事が出来ました。 http://oshiete1.goo.ne.jp/qa5102884.html 同様にFormsでも簡略出来ないのでしょうか? For i = 1 To 5 Controls("Command" & i).Caption = "ABC" Next i ----------------------------------------- For i = 1 To 5 Forms("Form" & i).Caption = "ABC" Next i 上記Formsの使い方をすると、実行時エラー'13': 型が一致しません。 すみませんが、ご教授願います。

  • エクセルVBAラベルの変数?

    エクセル2000VBAにて下記のように作成しました。 With ActiveSheet For i = 4 To 200 If Label1.Caption = .Cells(i, 1) Then For h = 4 To 34 If Label25.Caption = .Cells(2, h) Then For idx = i To 200 If .Cells(idx, 3) = Label21.Caption Then Label6.Caption = .Cells(idx, h) Label7.Caption = .Cells(idx + 2, h) GoTo ラベル2 End If Next idx End If Next h End If Next i ラベル2: For i = 4 To 200 If Label2.Caption = .Cells(i, 1) Then For h = 4 To 34 If Label25.Caption = .Cells(2, h) Then For idx = i To 200 If .Cells(idx, 3) = Label21.Caption Then Label8.Caption = .Cells(idx, h) Label9.Caption = .Cells(idx + 2, h) GoTo ラベル3 End If Next idx End If Next h End If Next i ラベル3: ・・・ End With Label1~5まで同じ処理を行うため 1~5まで変数を使用して簡単にしたいのですが Label(変数)の書き込み方がわかりません? 検索を使用しましたが検索項目が悪いのか なかなか解決しません。 何方か教えていただけないでしょうか?

  • 配列化

    VB2005においてlabel,textboxといったコントロールを配列化したいのですがどうすればいいでしょうか? VB6では下記のコードが成り立ちますが・・・ For i=0 to 3 label(i).caption = str(i) Next このようにコントロール自体を配列化することは出来るのでしょうか?

  • [delphi] 変数を利用してコンポーネント名指定したいのですが、可能でしょうか?

    表題の件、どなたか教えてください。 「可能」か「不可能」かの情報や代替案でもありがたいです。 ※delphi6 enterprise版を使用しています。 質問 コンポーネント名の指定に変数は使えるのでしょうか? 例えば、labelコンポーネントを複数設置しそのlabel名の末尾を数字にする(label1,2,3・・・)。何かの処理の際に、for文で変数を送り(i=1,2,3・・・)、label名+変数.captionなどという形で指定することはできるでしょうか? 例 ラベル名 label1 label2 label3 を設置 ボタンクリック時などに、 var i : integer; for i := 1 to 3 do begin   label(i).caption := inttostr(i) ; end; よろしくお願いします。

  • ラベルコントロ-ルを貼りつける方法

    ユーザーフォーム上に、ラベルコントロールを50個以上 整列して貼りつけたいのです。(例えば銀行ATMのタッチパネルの50音字のようなもの。) Sub Test01() for i=1 to 60 (ラベルコントロールの発生) j=int(i/6)+1 k=(i Mod 6)+1 Form1.label1(i).Caption="" Form1.label1(i).Left=200+j*600 Form1.label1(i).Width=400 Form1.label1(i).Height=200 Form1.label1(i).Top=200+500*k next i End Sub としたいと思っていますが、肝心の(コントロールの発生)の部分のコーディングを色々調べましたが判りません。(全てコントロールはドラッグアンドドロップで 貼りつける前提の説明になっています。) (今はラベル1個から何度もコピーしてコントロール配列にして凌いでいます。) どうぞよろしくご教示をお願いします。

  • VBA 同様処理の簡素化?

    エクセル VBAで下記のようにテキストボックスの処理を 書き込みました。 Private Sub TextBox24_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) '注文合計数 Sukei = O If KeyCode = 13 Then For Kasan = 18 To 34 Soukei = Val(Controls("TextBox" & Kasan).Text) Sukei = Sukei + Soukei Next Kasan Label41.Caption = Sukei '見込合計数 MSukei = O For MKasan = 35 To 51 MSoukei = Val(Controls("TextBox" & MKasan).Text) MSukei = MSukei + MSoukei Next MKasan Label42.Caption = MSukei '総合計数 Label39.Caption = Val(Label41.Caption) + Val(Label42.Caption) End If End Sub Private Sub TextBox25_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) '注文合計数 Sukei = O If KeyCode = 13 Then For Kasan = 18 To 34 Soukei = Val(Controls("TextBox" & Kasan).Text) Sukei = Sukei + Soukei Next Kasan Label41.Caption = Sukei '見込合計数 MSukei = O For MKasan = 35 To 51 MSoukei = Val(Controls("TextBox" & MKasan).Text) MSukei = MSukei + MSoukei Next MKasan Label42.Caption = MSukei '総合計数 Label39.Caption = Val(Label41.Caption) + Val(Label42.Caption) End If End Sub テキストボックス24、25内の処理は同じなのですが テキストボックスが増えた場合、修正することも考えて 簡素化したいのですが、どのように行なえばいいでしょうか?

  • 動的コントロールができない

    フォームをロードしたときに ラベルを動的に貼り付けたいんですが、 Controls.Addの部分でエラーが出てしまって 手が付けれません。 どなたかお助けください。 Dim i As Integer Dim l_week As Label For i = 1 To 6 Set l_week = PN_HEAD.Controls.Add("VB.label", "label" & i) With l_week .Width = CInt(Math.Round(PN_HEAD.Width / 7)) .Height = CInt(Math.Round(PN_HEAD.Height)) .Left = (i Mod 7) * .Width .Top = 0 .Caption = aWeekDayName(i) .Alignment = ContentAlignment.MiddleCenter .Visible = True End With Next

  • Q:Ecvel 2007 VBA: 長い処理の間のメッセージ?

    いつもお世話になります。 ユーザーフォームの下にラベルを置いて、ステータスバー的に使っています。 ちょっと時間が掛かる処理があることが分かったので、その間は「処理中・・・」的なメッセージを出すことにしました。 現在は以下のようなプログラムにしています。 Option Explicit Private Sub CommandButton1_Click() setColor1 '<==Break? setcolor2 Dim i As Long For i = 2 To 10000 Cells(i, 5).Value = "wanwan" Next i setcolor3 End Sub Sub setColor1() With UserForm1.Label1 .Caption = "you push the button..." .ForeColor = RGB(0, 255, 0) End With End Sub Sub setcolor2() With UserForm1.Label1 .Caption = "wait for a while..." .ForeColor = RGB(255, 0, 0) End With End Sub Sub setcolor3() With UserForm1.Label1 .Caption = "Finished" .ForeColor = RGB(0, 0, 0) End With End Sub これを実行しても、Forループの間はLabel1のCaptionはフォームデザイン時のデフォルト値Beforeになったままで、Forループが終わるとsetcolor3によってセットされるFinishedになります。 setcolor1、setcolor2が表示する途中経過は見えません。 しかし、上のリストの Break? と書いているところにブレークポイントを置いて、ブレークしたらF8を連打してsetcolor1、setcolor2を手動実行するとメッセージは狙い通りに変わります。 Forループの中でワークシートに何らかの操作を行っている場合にのみ起こる現象で、Forループの中でwait文を書いて10秒待つとかやると、メッセージは狙い通りに変わります。 ワークシートを処理しながら、メッセージを狙い通りに変える方法はあるでしょうか。 何かわかりましたらよろしくお願いします。 なお、ユーザーフォームの画像を添えます。

  • 乱数で・・・

       ラベル10枚に1~10までを乱数を入れたいのです ただしダブらない どうすればいいのでしょうか?? 自分で考えたのですがバグがあります ※コマンドをクリック ※クローンは用意済み Private Sub Command1_Click() Dim a(0 To 9) For i = 0 To 9 a(i) = Int(Rnd * 10)+1  For b = 0 To 9   If a(i) = a(b) Then     If i <> b Then     a(i) = Int(Rnd * 10) + 1     End If   End If   Next b Next i For c = 0 To 9 Label1(c).Caption = a(c) Next c End Sub バグの原因はなんとなくわかるのですがどうすればいいのか分かりません 素人ですいません。

  • VBA:ユーザフォームのラベルの指定の仕方教えてください。

     今、ユーザフォームに20個のラベルがあります。それぞれのラベルは、条件によりラベルの表示内容が変更します。そこで、ラベルの表示変更が必要なときにすぐに変更できるようにしたいと考えています。しかし、例えば以下のようなコードを作成するとエラーになり困っています。  Label(i)で、iの番号によりラベルが呼び出されないだろうかと自分なりに作りましたがダメでした。以下のようなループ文中で特定のラベルを呼び出し処理することは不可能でしょうか?  やはり、UserForm1.Label3などのように番号をきちんと書かないとダメでしょうか?本当は、ラベルが82個ありその一つ一つにコードを割り当てるのが大変です。また、きれいなコードで書きたいと思うからです。宜しければ、ご教授願います。 -------------------------------------------- Sub セルの値をラベル表示する() For i = 1 To 20 With UserForm1.Label(i) .Caption = Cells(1, i) End With Next i End Sub

このQ&Aのポイント
  • Windows11にアップグレードしたら、古いスキャナー(GT-9300)が使用できなくなりました。
  • ソフトウェアの更新を試しましたが、問題は解決しませんでした。
  • 古いスキャナーがWindows11に対応していない可能性があります。
回答を見る