|
皆さん、今年もよろしくお願いします。
>UserForm1(年度選択フォーム)のコンボボックスリストをUserForm2(19年度)、UserForm3(18年度)、UserForm4(17年度)...とし、コンボボックスより選択後にコマンドボタンを押すと選択したUserFormを表示することはできるでしょうか
結論としては、↑このご質問、「複数のユーザーフォームは要らない」となるのですが、
お正月で暇なので、順を追って記述します。
まず、新規ブックにユーザーフォームを4つ用意してください(あくまでも新規ブックですよ)。
のーりさんの例題どおり、
UserForm1(年度選択フォーム)
UserForm2(19年度)
UserForm3(18年度)
UserForm4(17年度)
とし、上記の4つのユーザーフォーム全てに
コンボボックス(ComboBox1)とコマンドボタン(CommandButton1)の
ふたつのコントロールを配置してください。
標準モジュールに
'**********************************************************************
Sub main()
UserForm1.Show
End Sub
UserForm1のモジュールに
'**********************************************************************
Option Explicit
Private Sub CommandButton1_Click()
Dim frmnm As String
With ComboBox1
frmnm = .List(.ListIndex, 1)
End With
UserForms.Add(frmnm).Show
End Sub
'**********************************************************************
Private Sub UserForm_Initialize()
With ComboBox1
.ColumnCount = 1
.AddItem "19年度"
.List(0, 1) = "userform2"
.AddItem "18年度"
.List(1, 1) = "userform3"
.AddItem "17年度"
.List(2, 1) = "userform4"
.ListIndex = 0
End With
End Sub
として、mainを実行しててみてください。
コンボボックスで適当な年度を選択して、コマンドボタンをクリックしてください。
年度に対応したユーザーフォームが表示されませんか?
UserForms.Add(frmnm).Show
これは、応用すると便利な場合がありますから、
押さえて置いてください。
が、このご質問の場合は、これでは不十分です。
だって、年度が増えるたびにユーザーフォームを追加し、
その年度用のコードをユーザーフォームに記述しなければなりません。
これでは、VBAでプログラミングする意味が半減してしまいます。
また、別の新規ブックにユーザーフォームを2つ用意してください(あくまでも新規ブックですよ)。
UserForm1(年度選択フォーム)
UserForm2(月別選択フォーム)
とし、上記の2つのユーザーフォーム全てに
コンボボックス(ComboBox1)とコマンドボタン(CommandButton1)の
ふたつのコントロールを配置してください。
標準モジュールに
'**********************************************************************
Sub main()
UserForm1.Show
End Sub
UserForm1のモジュールに
'**********************************************************************
Private Sub CommandButton1_Click()
Load UserForm2
With ComboBox1
UserForm2.年度 = .Value
End With
UserForm2.Show
End Sub
'**********************************************************************
Private Sub UserForm_Initialize()
With ComboBox1
.ColumnCount = 1
.AddItem "19年度"
.AddItem "18年度"
.AddItem "17年度"
.ListIndex = 0
End With
End Sub
UserForm2のモジュールに
'**********************************************************************
Public 年度 As Variant
Private Sub UserForm_Activate()
Me.Caption = 年度 & "の表示月の選択画面"
End Sub
として、mainを実行しててみてください。
コンボボックスで適当な年度を選択して、コマンドボタンをクリックしてください。
Userform1で選択した年度がUserform2に受け継がれていることが確認できますよね!!
Userform1から、Userform2へ何年度という情報を受け渡すことが
出来れば、Userform2での他の処理(コード)はどの年度も同じではないですか?
だとすれば、ユーザーフォームは、Userform1とUserform2のふたつで
良いですよね?
更に、今回のユーザーフォームに扱う情報が 年度と月と実行ボタンの
3つであれば、一つのユーザーフォームでも実現可能ですよね。
これについては、「質問を簡略にするために例題では、3つの情報にしたけど、
本当はもっと複雑な情報が必要」というなら、無理に一つにすれば・・・、
とは言いませんが、検討してみてください。
とにかく、年度の分だけユーザーフォームを用意する仕様は私は反対ですよ!!
|
|