Sibainu Relax Room

柴犬と過ごす

EXCELのではまったところ

ComboBox

 ACCESSのComboBoxと扱いが異なりますので記録することにしました。
 TextColumn の値を設定することをしなかったため、BoundColumn が正しく設定してもコントロールに表示したい値が反映されないので2時間ほど頭を悩まし続けました。かなり時間ロスになりました。疲れた~~~~~~。

 また、MatchRequired = True にしたいところですが、リストにない値だと「プロパティの値が無効です」というメッセージが出ます。フォームを開いた時から空のコンボボックスをクリックして、なにも選択しなかったとしても先のメッセージが表示されリストにある値が選択されるまで終われなくなってしまいます。
 「ESC」を押下して入力を無効にすればよいのですが、これを知らないと終われないのも事実で、知らないものが操作して出くわすと困惑の極地ですので、Style = fmStyleDropDownList を設定します。

copy

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