- ベストアンサー
エクセルVBAのユーザーフォームのリストボックスについて教えてください
- エクセルVBAのユーザーフォームのリストボックスについて教えてください。
- ユーザーフォームの起動時に特定の項目を選択した状態にすることは可能でしょうか。
- ユーザーフォームのリストボックスで青く色がついている項目の選択状態を確認できますか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 こちらの場合も、_Click ではなく _Change を使うのが妥当です。 それと、.Listプロパティを使う方が(Clearする必要もなくなり) スッキリ書けますので、Array() 関数と合わせて、 使い方をVBAのヘルプなどで調べて確認してみてください。 Private Sub UserForm_Initialize() With ListBox1 .List = Array("ABC", "DEF", "GHI") .ListIndex = 0 End With With ListBox2 .List = Array("123", "456", "789") .ListIndex = 2 End With End Sub Private Sub ListBox1_Change() With ListBox2 Select Case ListBox1.Value Case "ABC" .List = Array("123", "456", "789") Case "DEF" .List = Array("456", "789") Case "GHI" .List = Array("789") End Select .ListIndex = 0 End With End Sub
その他の回答 (2)
- cj_mover
- ベストアンサー率76% (292/381)
> Changeで作り直してみたんですが、結果的に動作は同じになるのでしょうか > なぜChangeの方が妥当なのでしょうか ListBoxが現在お使いのように、シングルセレクトであれば、同じ様に反応しますが、 Changeイベントが先です。 マルチセレクトに設定してある場合は、Clickイベントは無視されます。 汎用性が低いClickイベントを薦める理由はないでしょう。 妥当、という言い方をしたのは、 Clickイベントでも条件によっては間違いではない、ということも含みにして、 一方で、Clickを教えずChangeしか教えないサイトもあるほど、認知度に差があることや、 基本、イベントは先に発生するものを選ぶものですし、汎用的なものを薦めたいしし、 などなど、ひとつひとつは決定的な理由とまでは言えないのかもしれないけれど、 Clickを薦める理由は見つけられない、というような意味になるでしょうか。 > ClickでもChangeでもListboxのスクロールをクリックしただけで、反応してしまうんですね "スクロールをクリック"というのがよく解りませんけれど、 仮にListBoxにスクロールバーが表示されていたとしても、 これをクリックした時にはClickもChangeも発生しません。 > できれば、具体的に何か選択した場合のみ反応させたかったのですが そういった要求に応える為には、普通は、確定ボタンを別に設けるとか、 _KeyUpイベントなどでEnterキーを拾うとかします。 また、キーボードの方向キーだけで操作しているような場合は、 {HOME} {END} {PGUP} {PGDN} キーなどを活用すれば、 ある程度、緩和されるのではないですか?
お礼
追加で回答ありがとうございます 確かに汎用性がある方が優先されますね 納得しました スクロールについては突然話がとんですみません 実は、今回の質問とは関係がないのですが、Listboxを選択することで、別のチェックボックスをtrue→Falseにするようしていました Private Sub ListBox1_Enter() CheckBox1.Value = False End Sub ListBox1には複数の候補があるので、3つまで表示できるようにしており、残りはスクロールバーを使うことで表示しているのですが、そのスクロールバーをクリックするだけでCheckBox1がtrue→Falseになってしまったので、実際に何か候補を選択した場合のみCheckBox1を変化できるよう悩んでいたわけです 確定ボタンを別に設けて解消できるか挑戦してみます ありがとうございました
- watabe007
- ベストアンサー率62% (476/760)
>起動した時点で、ListBox1には"ABC"、ListBox2には"789"を選択 >Private Sub UserForm_Initialize() >With UserForm.ListBox1 >.AddItem "ABC" >.AddItem "DEF" >.AddItem "GHI" >.ListIndex = 0 >End With Me.ListBox2.ListIndex = 2 >End Sub
お礼
早速の回答ありがとうございます 無事できました 助かりました
お礼
Arrayですっきりしました ありがとうございます Changeで作り直してみたんですが、結果的に動作は同じになるのでしょうか なぜChangeの方が妥当なのでしょうか ClickでもChangeでもListboxのスクロールをクリックしただけで、反応してしまうんですね できれば、具体的に何か選択した場合のみ反応させたかったのですが