Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


28689 / 76734 ←次へ | 前へ→

【53337】Re:ユーザーフォームのコンボボックスより別のユーザーフォームを表示するには
発言  ichinose  - 08/1/2(水) 11:37 -

引用なし
パスワード
   皆さん、今年もよろしくお願いします。

>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つの情報にしたけど、
本当はもっと複雑な情報が必要」というなら、無理に一つにすれば・・・、
とは言いませんが、検討してみてください。

とにかく、年度の分だけユーザーフォームを用意する仕様は私は反対ですよ!!

3 hits

【53329】ユーザーフォームのコンボボックスより別のユーザーフォームを表示するには のーり 08/1/1(火) 13:51 質問
【53330】Re:ユーザーフォームのコンボボックスより... かみちゃん 08/1/1(火) 14:00 発言
【53331】Re:ユーザーフォームのコンボボックスより... のーり 08/1/1(火) 14:59 質問
【53332】Re:ユーザーフォームのコンボボックスより... かみちゃん 08/1/1(火) 15:24 発言
【53337】Re:ユーザーフォームのコンボボックスより... ichinose 08/1/2(水) 11:37 発言
【53340】Re:ユーザーフォームのコンボボックスより... のーり 08/1/4(金) 11:57 お礼

28689 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free