Спасибо вам, ребята! Я сожалею, что 7 июня мне приходится иметь дело с моими дерьмовыми вопросами! лол жаль июнь

я есть база данных Access с 10+ текстовыми элементами управления. Я хотел бы иметь некоторый код для обработки события CTRL + A KeyPress. Как правило, при нажатии CTRL + A в Access, это выбираетвсе записей. Моя конечная цель состоит в том, чтобы CTRL + A выделил только текст этого элемента управления (например, нажав CTRL + A в строке URL вашего браузера, он выбирает только текст THAT), чтобы я мог удалить только текст этого элемента управления. Я проверилэта статья, как я хотел что-то, что может обрабатывать любое текстовое поле (обработка KeyPress каждого текстового поля = 60+ строк кода). Могу ли я, скажем, использовать цикл for-next?

Function HandleKeyPress(frm As Form, KeyAscii As Integer, ByVal e As KeyPressEventArgs) 'should it be a function or a sub?
    For Each ctl In Me.Controls
        If KeyAscii = 1 Then    'I think this is CTRL + A?
            e.Handled = True    'Stop this keypress from doing anything in access
            focused_text_box.SelStart = 0
            focused_text_box.SelLength = Len(focused_text_box.Text)
        End If
    Next
End Function

Наряду с этим, как я могу передать этой подпрограмме / функции имя текстового поля?

Примечание: Если вы еще не заметили, я все еще новичок с VBA / Access.

 June710 дек. 2017 г., 09:02
Вы поместили этот код в модуль VBA? Вы запускали Debug> Compile? Это ошибки на KeyPressEventArgs. Похоже, это класс VB.net, и Access VBA не распознает его, если нет справочной библиотеки, которую мне нужно активировать.
 Pat10 дек. 2017 г., 19:16
Я знал, что это, скорее всего, приведет к ошибке, но я просто не знал, какой будет эквивалент в VBA. Оглядываясь назад, я должен был просто посмотреть, мои извинения.
 jsotola10 дек. 2017 г., 09:22
если все, что вы хотите, это выбрать контрольный контент, чтобы вы могли удалить его, а затем просто удалить, не выбираяcontrol.text = ""

Ответы на вопрос(1)

Решение Вопроса

так как он содержит несколько вещей, которые просто не работают таким образом в VBA (как отмечалось в июне7), и так как события keydown формы имеют приоритет над событиями keybox textbox

Вместо этого вы можете использовать следующий код (вдохновленныйэтот ответ на СУ):

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyA And Shift = acCtrlMask Then 'Catch Ctrl+A
        KeyCode = 0 'Suppress normal effect
        On Error GoTo ExitSub 'ActiveControl causes a runtime error if none is active
        If TypeOf Me.ActiveControl Is TextBox Then
            With Me.ActiveControl
                .SelStart = 0
                .SelLength = Len(.Text)
            End With
        End If
    End If
ExitSub:
End Sub

Важно установитьForm.KeyPreview для свойства True, используя VBA или просто панель свойств, чтобы эта функция имела приоритет над поведением по умолчанию.

 Pat10 дек. 2017 г., 19:21
Спасибо вам, ребята! Я сожалею, что 7 июня мне приходится иметь дело с моими дерьмовыми вопросами! лол жаль июнь

Ваш ответ на вопрос