VBA, MS Access MS Access в примерах

Перемещение вверх и вниз по ленточной клавишами управления курсором

Как известно, по умолчанию, в ленточной форме перемещение от записи к записи происходит только после прохождения фокуса через все доступные поля. Дабы производить переход так же как в таблице необходимо:
1.
Для формы установить в свойстве ПЕРЕХВАТ НАЖАТИЯ КЛАВИШ = ДА
Или поместите следующий код в процедуру загрузки формы.

Private Sub Form_Load()  
    Me.KeyPreview=True  'Перехват нажатия клавиш. 
End Sub 


2.
На событие КЛАВИША ВНИЗ Form_KeyDown() формы вставить код:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
On Error GoTo KeyDownERR
'Обработка направления перехода
    Select Case KeyCode
        Case vbKeyUp 'Нажата клавиша ВВЕРХ
            Me.Recordset.MovePrevious
            'Или так:
            'Me.Recordset.Move -1
        Case vbKeyDown 'Нажата клавиша ВНИЗ
            Me.Recordset.MoveNext
            'Или так:
            'Me.Recordset.Move 1
        End Select
    Exit Sub
KeyDownERR:
    KeyCode = 0
    Err.Clear
End Sub


Вариант посложнее (с ComboBox-ами):
Если в ленточной форме есть ComboBox-ы, то дополнительно необходимо:
     - Добавить в модуль формы переменную - Private bFocusInComboBox As Boolean
     - Обработать событие LostFocus (Потеря Фокуса) для каждого ComboBox-a формы как показано
Все эти сложности с флагами только ради того что бы пользователь мог разворачивать и выбирать значение в КомбоБоксе с клавиатуры.


Private bFocusInComboBox As Boolean 'Флаг присутствия в (возможно) раззвернутом комбобоксе


Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'es 25.03.2017 - 10.12.2017 LE
' Перемещение по записям как в таблице (клавишами управления курсором )
' с учётом случая разворачивания поля со списком с клавиатуры : Alt + Down
'--------------------------------------------------------------------------
'Литература:
'   https://msdn.microsoft.com/en-us/library/aa733630(v=vs.60).aspx
'--------------------------------------------------------------------------
' Внимание!!
' У формы ставим : Me.KeyPreview = True
'--------------------------------------------------------------------------

Dim intAltDown As Integer
Dim ShiftKey%
Dim ctrl As Control

On Error GoTo KeyDownERR
    
'Заглушка - на случай разворачивания поля со списком с клавиатуры : Alt + Down
    ShiftKey = Shift And 7
    If ShiftKey = 4 And KeyCode = vbKeyDown Then
        If Me.ActiveControl.ControlType = acComboBox Then 'И если тек. контроль = КомбоБокс
            bFocusInComboBox = True 'Ставим флаг отбоя
            'Debug.Print "Alt + Down in " & Me.ActiveControl.Name
        End If
    End If

    If bFocusInComboBox = True Then Exit Sub

'Обработка направления перехода
    Select Case KeyCode
        Case vbKeyUp 'Нажата клавиша ВВЕРХ
            Me.Recordset.MovePrevious
        Case vbKeyDown 'Нажата клавиша ВНИЗ
            Me.Recordset.MoveNext
    End Select
    Exit Sub

KeyDownERR:
    KeyCode = 0
    Err.Clear
End Sub

Назад ToTop
L.E. 10.12.2017
Рейтинг@Mail.ru