컴퓨터 공부/엑셀 & VBA

[엑셀vba] 사용자 정의폼 KeyDown 이벤트 - KeyCode 파라미터

도 박사 2021. 8. 20. 12:13
반응형

사용자 정의 폼을 사용하다보면 KeyDown 이벤트를 이용할 때가 있다. 특정 키를 눌렀을 때 작업을 수행 할 수 있도록 할 수 있는 이벤트이다.

 

 

TextBox1을 생성하고 KeyDown 이벤트를 눌러보면 다음과 같이 나타난다.

1
2
3
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 
End Sub
cs

 

KeyCode와 Shift 파라미터는 다음과 같은 의미를 가진다.

KeyCode: 내가 누른 키의 번호

Shift: Shift키를 눌렀는지 확인 (0이면 안누름, 1이면 누름)

 

 

메인 자판 키의 KeyCode 값(진회색: 키 이름, 연회색: KeyCode)

특이한 점

- 좌측 Ctrl를 누르면 Shift 값: 2, KeyCode:17 으로 인식 

- 좌측 Alt를 누르면 Shift 값: 4, KeyCode: 18 으로 인식

- 한자, 한/영, 우측 Alt, 우측 Ctrl Key는 KeyCode가 229로 값이 동일(Shift 값 0)

 

 

방향키와 특수 기능 키
숫자패드 키

 

 

KeyDown 이벤트에서 키를 누를때 나타나는 KeyCode 값은 위 그림에서 확인 할 수 있다. 이것으로 할 수 있는 기능이라면 TextBox에서 사용자 입력값을 받을 때 특정 글자나 숫자만 나타낼 수 있게 제한할 수 있다.

 

 

- 입력 제한 기능 넣어보기

테스트용 폼

1
2
3
4
5
6
7
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Label3.Caption = KeyCode
    If KeyCode 47 And KeyCode 58 Then
    Else
        KeyCode = 0
    End If
End Sub
cs

메인 자판의 숫자키 범위에서만 입력이 가능하도록 코드를 구성해봤다. 범위 밖의 키가 입력되면 KeyCode를 0으로 초기화하고 프로시져를 종료하면 아무일도 일어나지 않게된다. 

 

숫자만 눌러진다

 

특정 범위 또는 키를 사용제한하고 싶다면 KeyCode 이벤트를 이용해서 입력값 제한하는 것도 좋은 방법 중 하나인 듯하다. 

 

반응형