Excel VBA質問箱 IV

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

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


4967 / 13646 ツリー ←次へ | 前へ→

【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 お礼[未読]

【53329】ユーザーフォームのコンボボックスより別...
質問  のーり  - 08/1/1(火) 13:51 -

引用なし
パスワード
   初めて投稿させていただきます。ユーザーフォーム1(年度選択フォーム)にコンボボックスとコマンドボタンを配置し、コマンドボタンを押すとユーザーフォーム2(月別選択フォーム)を表示させるにはどのようにしたら良いのでしょうか。ちなみにユーザーフォーム2はコンボボックスとコマンドボタンを配置し、コマンドボタンを押すと月別のシートを表示するように作成してあります。

【53330】Re:ユーザーフォームのコンボボックスよ...
発言  かみちゃん  - 08/1/1(火) 14:00 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> コマンドボタンを押すとユーザーフォーム2(月別選択フォーム)を表示させる

以下のコードでは、CommandButton1をClickすると、UserForm2を表示します。

Private Sub CommandButton1_Click()
 UserForm2.Show
End Sub

【53331】Re:ユーザーフォームのコンボボックスよ...
質問  のーり  - 08/1/1(火) 14:59 -

引用なし
パスワード
   かみちゃんさん、ありがとうございます。正常に作動いたしました。私の質問が分かりづらくて申し訳ないのですが、次のように表示させるにはどうしたらよいでしょうか。
UserForm1(年度選択フォーム)のコンボボックスリストをUserForm2(19年度)、UserForm3(18年度)、UserForm4(17年度)...とし、コンボボックスより選択後にコマンドボタンを押すと選択したUserFormを表示することはできるでしょうか。

【53332】Re:ユーザーフォームのコンボボックスよ...
発言  かみちゃん  - 08/1/1(火) 15:24 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>UserForm1(年度選択フォーム)のコンボボックスリストをUserForm2(19年度)、
>UserForm3(18年度)、UserForm4(17年度)...とし、コンボボックスより選択後
>にコマンドボタンを押すと選択したUserFormを表示すること

以下のような感じでいかがでしょうか?

Selct Case ComboBox1.Value
 Case "19年度"
  UserForm2.Show
 Case "18年度"
  UserForm3.Show
End Select

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

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

【53340】Re:ユーザーフォームのコンボボックスよ...
お礼  のーり  - 08/1/4(金) 11:57 -

引用なし
パスワード
   ご返事遅くなりまして申し訳ありません。かみちゃんさん、ichinoseさん、ご教授有難うございます。
ichinoseさん、とても親切で分かりやすいご指導とても参考になりました。

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