• 締切済み

[エクセル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

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

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

tonkatsu
質問者

補足

ご回答、ありがとうございます。 ちょっと、試してみます。

回答No.3

#2の方が書かれてますが、 ComboBox2.Clear で削除できました。 追加はtonkatsuさんが書かれてるコードで追加できました。

tonkatsu
質問者

補足

皆様、ご回答ありがとうございます。 .clearを使うと、リストだけで無く、コンボボックスのテキストまでも消されてしまうのですよね。 それだと、都合が悪くて、どうしたものかと悩んでます。

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

そのコードは、何処に記述しているのですか? ユーザーフォームの名前を指定していないということは、同じフォームの何かの イベントプロシージャに記述しているように思いますが、それでしたら、 そのコードで動作します。 ただ、削除するのは、こんな感じでいいかと思います。 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

回答No.1

コンボボックスはフォームに付いてるのですか? それともシート? セルの値は、プログラムから変更するのですか?

tonkatsu
質問者

補足

コンボボックスはフォームに付いています。 セルの値はプログラムから変更しています。 同一プロシージャ内で上記のようなリストの削除と追加は行えないのでしょうか。

関連するQ&A