- 締切済み
VBAコンボボックスのリスト選択について
現在、ユーザーフォームを作成していますがコンボボックスでのリスト選択について質問します。 【質問内容】 コンボボックスを3つ作成し、Select Caseでそれぞれのリストを連動させるプログラムを組んでいます。 (1)3つとも選択した後で例えばリスト1を変更しようとするとエラーになってしまいます。リスト以外の文字列も入力できるようにしているつもりですがなぜでしょうか? (2)選択後、シートセルに転送した後、テキストボックスならば「.Text = ""」で一旦空白になりますが、コンボボックスの場合どうしたらよいのでしょうか? シートセルに転送後も選択した内容が残ってしまい結局(1)の事象に基づきエラーになってしまい連続入力ができません。 初歩的な質問で恐縮ですが、よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
コンボボックスの選択肢に RowSourceを使っているのであれば 一度 .RowSource="" といった具合にして選択肢を全て削除してから 新たに範囲を設定してみましょう Sub ComboBox1_Change() With ComboBox2 .RowSource = ComboBox1.Text .ListIndex = -1 .Text = "" End With End Sub といった具合にしてみてはいかがでしょう 今回は RowSourceに設定するデータ範囲の名前と ComboBox1の選択肢が一緒なのでこのようにしました ComboBox1の選択をやめる(listIndex = -1)とComboBox2の選択肢も全て削除されコンボボックスの表示も消えるようにしています エラーになってしまうのであればそのエラー内容を投稿しましょう また エラーになるであろうイベントにブレークポイント設定して F8キーによるステップ実行を行い 何処でエラーになるのか特定しましょう
- redfox63
- ベストアンサー率71% (1325/1856)
現在お書きになっているコードを公開してみませんか コンボボックスのどのようなイベントを使って選択肢の変更をなさっているのでしょう 通常ですと Changeイベントだと思いますが ・・・ コンボボックスの選択肢を全て消してしまうならclearメソッドで可能です 未選択の状態にしたいのであれば ListIndexを-1にすれば未選択になります
補足
早速のご回答ありがとうございます。 Clearメソッドを使用してはみたのですがうまくいきません。 以下に抜粋したコードを記載しておりますのでご教示のほどお願いいたします。 不足がありましたらご指摘ください。 ----------------------------------------------- Private Sub UserForm_Initialize() With ComboBox1 .Clear .AddItem "収入" .AddItem "支出" .AddItem "貯蓄" End With End Sub ------------------------------------------------ Private Sub ComboBox1_Change() With ComboBox2 .Clear Select Case ComboBox1.List(ComboBox1.ListIndex) Case "収入" .RowSource = "収入" Case "支出" .RowSource = "支出" Case "貯蓄" .RowSource = "貯蓄" End Select End With End Sub ------------------------------------------------- Private Sub CommandButton1_Click() Dim A As Long A = Range("入力シート").Rows.Count 'Range("入力シート").Rows(A).Insert Shift:=xlDown Range("入力シート").Cells(A - 1, 1) = TextBox3.Text Range("入力シート").Cells(A - 1, 2) = ComboBox1 Range("入力シート").Cells(A - 1, 4) = ComboBox2 Range("入力シート").Cells(A - 1, 6) = ComboBox3 Range("入力シート").Cells(A - 1, 8) = TextBox1.Text Range("入力シート").Cells(A - 1, 9) = TextBox2.Text TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" End Sub -----------------------------------------------------
お礼
ご回答ありがとうございます。 「RowSource = ComboBox1.Text」は、言われたら「そうか!」と思います。本当に勉強になります。 また、ご指導いただいた式で入力後の削除が実現できました。ありがとうございました。