コンボボックスでリスト以外の値を入力できないようにする
 コンボボックスのプロパティ「MatchRequired」を使うと、リストに
ない値は入力できないように制御されます。

 しかし、このプロパティを設定してしまうと、リスト以外の値が入力された
時のエラーメッセージの制御がVBAで不可能になってしまいます。

 Excelからのエラーメッセージは「プロパティの値が不正です」という
内容なので、もう少し親切な独自のメッセージを表示する場合は、
プロパティ「MatchRequired」を使わずに、リスト項目中にない項目を選択すると
値「-1」を返すListIndexプロパティを利用する方法があります。

 サンプルマクロを実行するには、フォームにコンボボックス「ComboBox1」と
テキストボックスを配置してください。


Dim blnError As Boolean

Private Sub UserForm_Initialize()

    ComboBox1.RowSource = "A1:A5"
    
End Sub

Private Sub ComboBox1_Click()

    SendKeys "{TAB}"
    
End Sub

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    If blnError Then Cancel = True
    
End Sub

Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
                              ByVal Shift As Integer)
                              
    If KeyCode = vbKeyReturn Then
        blnError = False
        If ComboBox1.Value <> "" Then
            If ComboBox1.ListIndex = -1 Then
                MsgBox "Error!"
                blnError = True
              Else
                MsgBox "OK!"
                SendKeys "{TAB}"
            End If
        End If
        
     ElseIf KeyCode = vbKeyTab Then
      
        blnError = False
        If ComboBox1.Value <> "" Then
            If ComboBox1.ListIndex = -1 Then
                MsgBox "Error!"
                blnError = True
              Else
                MsgBox "OK!"
            End If
        End If
    End If
    
End Sub

 ListIndexプロパティは、リストの中で現在選択されている行のインデックスを
示します。

 ListIndexプロパティの値の範囲は-1以上で、リスト内の全行数から1を引いた数
(ListCountプロパティ-1)以下です。どの行も選択されていない場合、ListIndex
プロパティは「-1」を返します。リストボックスまたはコンボ ボックスでいずれかの
行を選択すると、そのインデックス番号がListIndexプロパティに設定されます。

 たとえば、リストの1行目を選択すると、ListIndexプロパティには0が設定され、
2行目を選択すると1が設定されます。

Excel97



戻る


Excel Word Access VBA! モーグ