コンボボックスのプロパティ「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が設定されます。
|