• ベストアンサー

ユーザーフォーム上でFor Each~Next?

Excelユーザーフォームでマルチページを使用しているのですが テキストボックスに文字(パスワード的なもの)を入力したら マルチページ内の特定ページのコントロールをenabled=trueにしたいのです(通常はenebledがtrue・falseの混合ページです) 先日よりFor Each~Next構文を使い始めたのですが勉強不足『オブジェクト・コレクション』の概念がいまいち理解できません。よろしくお願いします。 ネット上で調べてコピペしたのですがこのままだと他のページ、ページ外のコントロールまで影響するので良い方法をアドバイスしていただけますか?やはりコントロール個別にコードを書くしかないのでしょうか? Private Sub TextPASS_Change() If TextPASS.Value = "aaaa" Then For Each Control In Controls 省略(enabled=true) Next Else For Each Control In Controls 省略(enabled=false) Next End If End Sub

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

  • ベストアンサー
  • masa_019
  • ベストアンサー率61% (121/197)
回答No.2

こんにちは。 たとえば、マルチページの1番目のページ上のコントロールをループするには、 For Each control In UserForm1.MultiPage1.Pages(0).Controls とします。 インデックスは0から始まるので、1ページ目はPages(0)と記述します。

Alshark
質問者

お礼

ありがとうございます。 動作しました。コレクションとオブジェクトの部分を変えてみたのですが『オブジェクトが違います』『コレクションが不正です』『変数を設定してください』 などなどいろんなエラーが出て余計にパニックになっていました ページはインデックスで指定するんですね。ページのオブジェクト名でずっと考えていたので 勉強になりました

その他の回答 (1)

回答No.1

今一ピンとこないんですが、こういうことですか? Private Sub TextPASS_Change() Dim b As Boolean b=(TextPASS.Value = "aaaa") For Each Control In Me.Controls ' <-”Controls”を”Me.Contrls”に変更 省略(enabled=b) Next End Sub #「Option Explict」は指定しておきましょう。

Alshark
質問者

補足

すいません、私自身もどのように説明すればいいのかわからず解っている情報のみ投稿させてもらいました。 簡単に言うとデータベースをマルチページ(page10まで存在します)にて管理しています 例Page1:入力、Page2:DB参照、Page3:統計マクロなど… そこで特定のページの機能をパスワードにて使用可能となるようなコントロールをしようと考えています 上記のコードのままですと全ページループして全コントロールがenabled=Falseとなってしまうのです。 1ページ内だけでループさせるような、オブジェクト・コレクション記述があるのでしょうか? よろしくお願いします

関連するQ&A