ComboBox

ACCESSのComboBoxと扱いが異なりますので記録することにしました。
TextColumn の値を設定することをしなかったため、BoundColumn が正しく設定してもコントロールに表示したい値が反映されないので2時間ほど頭を悩まし続けました。かなり時間ロスになりました。疲れた~~~~~~。
また、MatchRequired = True にしたいところですが、リストにない値だと「プロパティの値が無効です」というメッセージが出ます。フォームを開いた時から空のコンボボックスをクリックして、なにも選択しなかったとしても先のメッセージが表示されリストにある値が選択されるまで終われなくなってしまいます。
「ESC」を押下して入力を無効にすればよいのですが、これを知らないと終われないのも事実で、知らないものが操作して出くわすと困惑の極地ですので、Style = fmStyleDropDownList を設定します。
Option Explicit
'----------------------------------------------------------------
'
Private Sub UserForm_Initialize()
Dim ComboList As Variant
Dim ComboRange As Range
'ダミーボタンにフォーカスをセットします。
CommandButton2.SetFocus
'コンボボックスのリストにセットする配列、レンジを取得します。
With Worksheets("Sheet2")
ComboList = .Range(.Cells(1, 1), _
.Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, 2)).Value
Set ComboRange = .Range(.Cells(1, 1), _
.Cells(.Cells(.Rows.Count, 3).End(xlUp).Row, 3))
End With
With ComboBox1
'配列の列数をセットします。(レンジからの配列は1から始まります。)
.ColumnCount = UBound(ComboList, 2)
.TextColumn = 2 'はまった部分
.BoundColumn = 2
.List() = ComboList
.MatchRequired = False
.Style = fmStyleDropDownList
.MatchEntry = fmMatchEntryComplete
.ColumnWidths = "25;100"
End With
With ComboBox2
.ColumnCount = 1
.TextColumn = 1 'はまった部分
.BoundColumn = 1
.AddItem "A"
.AddItem "P"
.MatchRequired = False
.Style = fmStyleDropDownList
.MatchEntry = fmMatchEntryComplete
End With
With ComboBox3
'レンジのカラム数をセットします。
.ColumnCount = ComboRange.Columns.Count
.TextColumn = 2 'はまった部分
.BoundColumn = 2
.RowSource = ComboRange.Parent.Name & "!" & ComboRange.Address
.MatchRequired = False
.Style = fmStyleDropDownList
.MatchEntry = fmMatchEntryComplete
.ColumnWidths = "25;100;100"
End With
Set ComboRange = Nothing
End Sub
'----------------------------------------------------------------
'
Private Sub CommandButton1_Click()
'セルに値をセットします。
With Worksheets("Sheet1")
.Cells(1, 1).Value = ComboBox1.Text
.Cells(1, 2).Value = ComboBox2.Text
.Cells(1, 3).Value = ComboBox3.Text
End With
End Sub
'----------------------------------------------------------------
'
Private Sub ComboBox1_Change()
'インデックスを表示させます。
TextBox1.Value = ComboBox1.Column(0)
End Sub