ユーザーフォームを作って、使ってみることを目標にして、連載記事でフォームやコントロールのプロパティやイベント、メソッドをご紹介しています。
前回は、ユーザーが値を入力したり、リストから選択したりできるコンボボックスをユーザーフォームに挿入する方法と、プロパティをいくつかご紹介しました。
今回は、このコンボボックスに値をセットする方法のご紹介です。
コンボボックスのRowSourceプロパティでセットする方法と、コンボボックスのAddItemメソッドを使って値を追加する方法の2通りをご紹介していきますよ。
前回までのおさらい
前回までに作成したユーザーフォームがこちら。
前回の記事では、画面上部右側にあるコンボボックスを追加して、「CmbUnit」というオブジェクト名を付けたのでした。
今回は、このコンボボックスに値をセットしていきましょう。
コンボボックスに値をセットする2つの方法
今回の記事では、コンボボックスに値をセットする方法として以下の2つの方法をご紹介していきます。
- RowSourceプロパティで、コンボボックスにセットしたい値があるワークシート上の範囲を指定する
- ComboBoxオブジェクトのAddItemメソッドで新規アイテムを追加する方法
リストボックスでもご紹介した方法とほぼ同じですね。
早速RowSourceプロパティを使う方法から見ていきましょう。
RowSourceプロパティでワークシート範囲を指定する
まず1つめの、コンボボックスに表示したいリストがあるワークシート上の範囲を、RowSourceプロパティに指定する方法です。
例えば、こちらのワークシートのA2セルからA6セルの範囲を、コンボボックスに表示したい場合。
プロパティシートのRowSourceプロパティの値に、このように「A2:A6」と入力します。
すると、このようにコンボボックスに指定したワークシート範囲の値が表示されるようになります。
AddItemメソッドで値を追加する
もう一つの方法、こちらはVBAから更新していきます。
ComboBoxオブジェクトのAddItemメソッドで、アイテムを追加する方法です。
記述方法はこちら。
追加したい順序は省略可能です。
省略した場合、自動的にコンボボックス内のリストの一番最後に追加されますよ。
AddItemメソッドでコンボボックスに入力した値をリストに追加してみる
早速、AddItemメソッドを使って、コンボボックスに値を追加してみましょう。
コードはこちら。
Private Sub TextItem_AfterUpdate() With CmbUnit .AddItem TextItem.Value End With End Sub
テキストボックスに入力した値を、コンボボックスの値にセットするコードです。
今回はテキストボックスのAfterUpdateイベントに入れてみました。
このコードを保存して、テキストボックスに値を入れてみると…
この通り、テキストボックスに入力した値が、コンボボックスの値に追加されていますね。
値をセットする方法はどちらかに統一する
リストボックスでも触れましたが、同一のコンボボックスに対して、RouwSourceプロパティとAddItemメソッドの両方を使って値を更新することはできません。
正確に言うと、RowSourceプロパティにワークシート範囲を指定していた場合は、AddItemメソッドで値を追加することができませんし、VBAからAddItemメソッドで値を追加した後にRowSourceプロパティに範囲をセットすると、AddItemメソッドで追加した値がRowSourceプロパティで指定した範囲の値で上書きされてしまいます。
コンボボックスの値をセットする方法は、RowSourceプロパティを使うか、AddItemメソッドを使うかのどちらかの方法に統一するようにしましょう。
最後に
今回は、コンボボックスに値をセットする方法として、RowSourceプロパティにワークシート範囲を指定する方法と、AddItemメソッドで新規アイテムを追加する方法の2つをご紹介しました。
以前の記事でご紹介した、リストボックスと同じセット方法ですね。
リストボックスとコンボボックスは、どちらもコントロール名に「ボックス」とつきますし、値が選択できるということで混同してしまうこともあるかもしれません。
しかし、コントロールに値をセットした後の見た目や、テキストが入力できる・できないなど、違いはしっかりありますので、目的に応じて使い分けていきましょう。
それでは、最後までお読みいただきありがとうございました!