- ベストアンサー
Excel VBAのUserFormを変数でループ化する方法
- Excel VBAのUserFormを変数とし、ループで処理を行いたい場合の方法を説明します。
- UserFormを変数で扱うことで、複数のUserForm間での処理をスッキリと書くことができます。
- UserForm自体を変数で対応することで、処理の一貫性が保たれ、トラブルが生じた場合にも素早く対応できます。
- みんなの回答 (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
その他の回答 (5)
- watabe007
- ベストアンサー率62% (476/760)
>ですがwatabe007さんも出来ないとなると >やはりできないのでしょうか・・ えっ!? tの変化により該当するUserFormのテキストボックスに 転記する処理はできてるはずですが・・・
お礼
あ・・すいません。 watabe007さん記述式で対応できました。 しかし、なぜ私のオリジナルでは出来ないのでしょうか? watabe007さんのを参考に少し考えて 対応してみます。 本当に有難うございます。
- watabe007
- ベストアンサー率62% (476/760)
>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
お礼
はい。そのような処理です。 ですがwatabe007さんも出来ないとなると やはりできないのでしょうか・・ 。
- watabe007
- ベストアンサー率62% (476/760)
表示だけなら、これでも可能です Dim i For i = 1 To 3 VBA.UserForms.Add("UserForm" & i).Show (0) Next
お礼
何度もご回答頂き有難うございます。 showは確かに出来ましたが処理自体はやはりできないですね・・ なぜでしょうか?? 処理とは例えば、ボタンの非表示から表示へと変更をさせたり ボタンの値をセルから代入するなどです。 これは不可能なことなのですか? 何度もご迷惑をおかけし申し訳ございませんが ご対応頂きます様よろしくお願いいたします。
- watabe007
- ベストアンサー率62% (476/760)
>しかしそれをループ処理ができないのですが・・ 表示するだけなら 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)
変数で扱うにはUserForms コレクションの Add メソッドを使用します。 uf(1) = "UserForm1" uf(2) = "UserForm2" uf(3) = "UserForm3" 'UserForm1表示 VBA.UserForms.Add(uf(1)).Show
補足
早急なご回答有難うございます。 変数処理は理解いたしました。 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
お礼
大変遅くなり申し訳ございません。 新しく作り直しを行い 下記同じ処理を行うとできるのですが、 自分のオリジナルに当てはめこむとできなくなります。 グローバル宣言をしても同じで・・ オリジナルに問題があるのでしょうか? UserForm中のテキストボックスはセルから代入することも可能なのですよね? 何度も申し訳ございません。