• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:UserForm自体を変数でループ化したいのですが・・)

Excel VBAのUserFormを変数でループ化する方法

このQ&Aのポイント
  • Excel VBAのUserFormを変数とし、ループで処理を行いたい場合の方法を説明します。
  • UserFormを変数で扱うことで、複数のUserForm間での処理をスッキリと書くことができます。
  • UserForm自体を変数で対応することで、処理の一貫性が保たれ、トラブルが生じた場合にも素早く対応できます。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.6

>しかし、なぜ私のオリジナルでは出来ないのでしょうか? 変数ufをグローバルで宣言すれば Public uf(1 To 3) As Object Sub ユーザーフォーム表示()   Dim i As Long   For i = 1 To 3     Set uf(i) = VBA.UserForms.Add("UserForm" & i)     uf(i).Show (0)   Next End Sub Private Sub UserForm_Activate()   uf(n).TextBox1.Text = ・・・ End Sub

van111
質問者

お礼

大変遅くなり申し訳ございません。 新しく作り直しを行い 下記同じ処理を行うとできるのですが、 自分のオリジナルに当てはめこむとできなくなります。 グローバル宣言をしても同じで・・ オリジナルに問題があるのでしょうか? UserForm中のテキストボックスはセルから代入することも可能なのですよね? 何度も申し訳ございません。

その他の回答 (5)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.5

>ですがwatabe007さんも出来ないとなると >やはりできないのでしょうか・・ えっ!? tの変化により該当するUserFormのテキストボックスに 転記する処理はできてるはずですが・・・

van111
質問者

お礼

あ・・すいません。 watabe007さん記述式で対応できました。 しかし、なぜ私のオリジナルでは出来ないのでしょうか? watabe007さんのを参考に少し考えて 対応してみます。 本当に有難うございます。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

>showは確かに出来ましたが処理自体はやはりできないですね・・ こんな事かな? Dim uf(1 To 3) As Object Dim i As Long, t As Long, n As Long For i = 1 To 3 Set uf(i) = VBA.UserForms.Add("UserForm" & i) uf(i).Show (0) Next t = 5 '仮にtを5とした場合、こちらのテストではUserForm2のTextBox1に転記されました。 Select Case t   Case 1 To 3: n = 1   Case 4 To 6: n = 2   Case 7 To 10:: n = 3 End Select With uf(n)   .TextBox1.Text = "てすと" End With

van111
質問者

お礼

はい。そのような処理です。 ですがwatabe007さんも出来ないとなると やはりできないのでしょうか・・ 。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

表示だけなら、これでも可能です Dim i For i = 1 To 3   VBA.UserForms.Add("UserForm" & i).Show (0) Next

van111
質問者

お礼

何度もご回答頂き有難うございます。 showは確かに出来ましたが処理自体はやはりできないですね・・ なぜでしょうか?? 処理とは例えば、ボタンの非表示から表示へと変更をさせたり ボタンの値をセルから代入するなどです。 これは不可能なことなのですか? 何度もご迷惑をおかけし申し訳ございませんが ご対応頂きます様よろしくお願いいたします。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>しかしそれをループ処理ができないのですが・・ 表示するだけなら Dim uf(1 To 3) Dim i For i = 1 To 3   uf(i) = "UserForm" & (i) Next For i = 1 To 3   VBA.UserForms.Add(uf(i)).Show (0) Next

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

変数で扱うにはUserForms コレクションの Add メソッドを使用します。 uf(1) = "UserForm1" uf(2) = "UserForm2" uf(3) = "UserForm3" 'UserForm1表示 VBA.UserForms.Add(uf(1)).Show

van111
質問者

補足

早急なご回答有難うございます。 変数処理は理解いたしました。 UserFormはまた「ADD」というメソッドを使うんですね。 しかしそれをループ処理ができないのですが・・ uf(1) = "UserForm1" uf(2) = "UserForm2" uf(3) = "UserForm3" 'UserForm1表示 For aaa = UserForms.Add(uf(1)) To UserForms.Add(uf(3)) aaa.Show Next .aaa

関連するQ&A