Сообщество,
Существует способ предотвратить потерю фокуса активного поля со списком при нажатии стрелки вниз (или стрелки вверх), когда он находится в конце (или начале) списка. Если есть лучший способ сделать это (желательно со стандартным свойством MS), пожалуйста, поделитесь.
Проблема: в конце списка в поле со списком, если вы нажмете стрелку вниз, вы переместитесь к любому элементу управления, который физически находится под активным полем со списком. И наоборот, если вы находитесь в верхней части выпадающего списка и нажимаете стрелку вверх. Это небрежно и контрпродуктивно. МС Эксель 2013.
Решение. Чтобы предотвратить эту потерю фокуса, в коде ComboBox пользовательской формы вы можете ввести следующее:
Private Sub Item1_DropDown_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case vbKeyDown
If Item1_DropDown.ListIndex = Item1_DropDown.ListCount - 1 Then
Item1_DropDown.ListIndex = Item1_DropDown.ListIndex - 1 'when at the bottom, stay in active combobox
Else: Item1_DropDown.ListIndex = Item1_DropDown.ListIndex 'if not at the bottom, keep moving down
End If
Case vbKeyUp
If Item1_DropDown.ListIndex = 0 Then 'when at the top, stay in active combobox
Item1_DropDown.ListIndex = 1
Else: Item1_DropDown.ListIndex = Item1_DropDown.ListIndex 'if not at the top, keep moving up
End If
End Select
' where "Item1_DropDown" is the name of my combobox
End Sub
Хорошо, вот как я смог предотвратить переключение поля со списком на другой элемент управления при нажатии вниз / вверх, когда он находится внизу / вверху списка ComboBox.
Кто-нибудь знает более чистый способ сделать это? Может быть, способ сделать это без использования кода?