プロが教えるわが家の防犯対策術!

現在、ユーザーフォームを作成していますがコンボボックスでのリスト選択について質問します。
【質問内容】
コンボボックスを3つ作成し、Select Caseでそれぞれのリストを連動させるプログラムを組んでいます。

(1)3つとも選択した後で例えばリスト1を変更しようとするとエラーになってしまいます。リスト以外の文字列も入力できるようにしているつもりですがなぜでしょうか?

(2)選択後、シートセルに転送した後、テキストボックスならば「.Text = ""」で一旦空白になりますが、コンボボックスの場合どうしたらよいのでしょうか?
シートセルに転送後も選択した内容が残ってしまい結局(1)の事象に基づきエラーになってしまい連続入力ができません。

初歩的な質問で恐縮ですが、よろしくお願いいたします。

A 回答 (2件)

コンボボックスの選択肢に RowSourceを使っているのであれば


一度 .RowSource="" といった具合にして選択肢を全て削除してから
新たに範囲を設定してみましょう

Sub ComboBox1_Change()
  With ComboBox2
    .RowSource = ComboBox1.Text
    .ListIndex = -1
    .Text = ""
  End With
End Sub
といった具合にしてみてはいかがでしょう
今回は RowSourceに設定するデータ範囲の名前と ComboBox1の選択肢が一緒なのでこのようにしました
ComboBox1の選択をやめる(listIndex = -1)とComboBox2の選択肢も全て削除されコンボボックスの表示も消えるようにしています

エラーになってしまうのであればそのエラー内容を投稿しましょう
また エラーになるであろうイベントにブレークポイント設定して
F8キーによるステップ実行を行い 何処でエラーになるのか特定しましょう
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
「RowSource = ComboBox1.Text」は、言われたら「そうか!」と思います。本当に勉強になります。
また、ご指導いただいた式で入力後の削除が実現できました。ありがとうございました。

お礼日時:2007/12/09 13:07

現在お書きになっているコードを公開してみませんか



コンボボックスのどのようなイベントを使って選択肢の変更をなさっているのでしょう
通常ですと 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
-----------------------------------------------------

補足日時:2007/12/08 21:11
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!