2017-12-10 17 views
0

10 개 이상의 텍스트 컨트롤이있는 Access 데이터베이스가 있습니다. CTRL + A KeyPress 이벤트를 처리 할 코드가 필요합니다. 일반적으로 Access에서 Ctrl + A를 누르면 모두 레코드가 선택됩니다. 내 최종 목표는 CTRL + A 만 해당 컨트롤의 텍스트를 삭제할 수 있도록 해당 컨트롤의 텍스트 만 선택하는 것입니다 (예 : 브라우저의 URL 표시 줄에서 Ctrl + A를 누르고 해당 텍스트 만 선택). this article을 확인했는데, 텍스트 상자 (각 텍스트 상자의 KeyPress = 60 + 코드 줄 처리)를 처리 할 수있는 기능이 필요했습니다. 내가 말할 수있는 방법이 있을까요? for-next loop?MS Access 다중 제어 KeyPress Ctrl + A 처리기

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에 대한 멍청한 의견입니다. 이 (June7가 언급 한 바와 같이) 바로 VBA에서 그런 식으로 작동하지 않는 여러 가지를 포함하고 있기 때문에

+1

이 코드를 VBA 모듈에 넣었습니까? 디버그> 컴파일을 실행 했습니까? KeyPressEventArgs에서 오류가 발생했습니다. 이것은 VB.net 클래스 인 것으로 보이며 활성화해야하는 참조 라이브러리가 없다면 Access VBA는이를 인식하지 못합니다. – June7

+0

원하는 경우 컨트롤 내용을 선택하여 삭제할 수 있습니다. 'control.text = ""를 선택하지 않고 삭제하십시오. – jsotola

+0

이것이 오류를 유발할 가능성이 가장 높다는 것을 알고 있었지만 VBA에서 동급이 무엇인지 확인하십시오. 돌아 보면, 나는 단지 그것을 보았어 야했다, 사과한다. – Pat

답변

0

현재 접근 방식은 작동하지 않습니다 및 양식를 keyDown 이벤트가 텍스트 상자를 keyDown 이벤트보다 우선하기 때문에

당신은 사용할 수 있습니다 대신 (this answer on SU에서 영감) 다음 코드 :

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 

그것은, VBA하거나 속성 창을 사용하여이 기능이 기본 동작을 통해 우선 순위를 확보 할 수 있도록하거나, True로 Form.KeyPreview 속성을 설정하는 것이 중요합니다.

+0

감사합니다! 6 월 7 일은 내 진절머리 나는 질문을 처리해야한다는 것을 유감스럽게 생각합니다! 롤 죄송합니다 june – Pat