- 締切済み
[エクセルVBA] コンボボックスのリストの更新方法について
エクセルVBAで以下のような方法でコンボボックスのリストを更新しようとしています。 参照セルの値が変わった場合に、コンボボックスのリストを削除して、新たな値をリストとして取り込みたいと思って、以下のようなコードを実行しましたが、 削除はできても、リストの追加時に"書き込みできません"というエラーが出てしまいます。 下記ロジックにかかわらず、「コンボボックスのリストを一旦クリアして、再度追加する」方法をアドバイス願います。 For i = 1 To 10 ComboBox2.RemoveItem (0) Next For j = 1 To 10 ComboBox2.AddItem Worksheets("Tool").Cells(j, 2).Value Next
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
Clear、AddItemなどしなくても、Bのコードを後出することで、AからBにきり変えられませんか。VB的発想からエクセルVBA発想に切りかえる。一応テストではそのようになりました。 Sub test01() Worksheets("sheet1").ComboBox1.ListFillRange = "a1:a8" 'A ' Worksheets("sheet1").ComboBox1.ListFillRange = "b1:b5" 'B End Sub
- peugeot307
- ベストアンサー率22% (29/130)
#2の方が書かれてますが、 ComboBox2.Clear で削除できました。 追加はtonkatsuさんが書かれてるコードで追加できました。
補足
皆様、ご回答ありがとうございます。 .clearを使うと、リストだけで無く、コンボボックスのテキストまでも消されてしまうのですよね。 それだと、都合が悪くて、どうしたものかと悩んでます。
- ja7awu
- ベストアンサー率62% (292/464)
そのコードは、何処に記述しているのですか? ユーザーフォームの名前を指定していないということは、同じフォームの何かの イベントプロシージャに記述しているように思いますが、それでしたら、 そのコードで動作します。 ただ、削除するのは、こんな感じでいいかと思います。 Private Sub CommandButton1_Click() Dim j As Integer Me.ComboBox2.Clear For j = 1 To 10 Me.ComboBox2.AddItem Worksheets("Tool").Cells(j, 2).Value Next End Sub
- peugeot307
- ベストアンサー率22% (29/130)
コンボボックスはフォームに付いてるのですか? それともシート? セルの値は、プログラムから変更するのですか?
補足
コンボボックスはフォームに付いています。 セルの値はプログラムから変更しています。 同一プロシージャ内で上記のようなリストの削除と追加は行えないのでしょうか。
補足
ご回答、ありがとうございます。 ちょっと、試してみます。