배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Excel 버전:   공통
검색어:   키보드, 날짜변경
제목:   키보드를 이용한 날짜 변경
     
 

  STEP> 키보드를 이용한 날짜 변경

입력장치 중 마우스는 Windows에게는 중요한 입력장치중 하나입니다. 특히 Windows뿐만 아니라 많은 응용 프로그램들이 마우스를 사용하여 작업 가능하지만 그러나 키보드 역시 무시할 수 없는 입력장치입니다. 특히 빠른 작업을 위한 최후의 보루는 키보드입니다.

날짜를 입력하는 경우 Calendar컨트롤을 사용한 프로그램을 종종 만나게 됩니다. 이것은 매우 직관적이어서 프로그램 사용이 즐겁기도 합니다. 그러나 그러한 컨트롤 대신 키보드를 사용하여 편리하게 날짜입력을 하는 것은 어떨까요? 편리하기만 하다면 마다할리 없겠죠.

아래의 Userform은 한 개의 Label컨트롤과 TextBox컨트롤로 구성되어 있습니다.

TextBox컨트롤에는 날짜가 입력될 것입니다. 이때 날짜를 변경하는 경우 방향키와 PageUp/PageDown키를 사용하여 날짜를 바꾸도록 하는 겁니다.

작 업

Up

다음 일

Down

이전 일

Left

이전 월

Right

다음 월

PageUp

다음 년도

PageDown

이전 년도

TextBox컨트롤의 이벤트 프로시져중에서 키보드와 관련된 것이 Sub TextBox1_KeyDown(...), Sub TextBox1_KeyUp(...), Sub TextBox1_KeyPress(...) 등등이 있습니다.

그 중에서 Sub TextBox1_KeyDown(...)를 이용합니다. 이 이벤트 프로시져의 매개변수에는 KeyCode As MSForms.ReturnInteger가 있습니다.  이것은 키보드의 키 코드값을 의미하며 사용자가 TextBox에서 입력한 키 값이기도 합니다.

Key

keycode

constants

Up

38

vbKeyUp

Down

40

vbKeyDown

Left

37

vbKeyLeft

Right

39

vbKeyRight

PageUp

33

vbKeyPageUp

PageDown

34

vbKeyPageDown

위의 vb로 시작하는 KeyCod상수는 KeyCodeConstants 열거형 상수의 멤버입니다.

 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    Dim DateChg As Date

    '// TextBox의 일자를 Date형식으로 변환하여 가져온다
    DateChg = CDate(TextBox1.Text)

    Select Case KeyCode

    Case KeyCodeConstants.vbKeyUp
        '// TextBox의 일자에 1일을 더한다
        DateChg = DateAdd("d", 1, DateChg)
    Case KeyCodeConstants.vbKeyDown
        '// TextBox의 일자에 -1일을 더한다. 결국 빼는 셈이다
        DateChg = DateAdd("d", -1, DateChg)
    Case KeyCodeConstants.vbKeyLeft
        '// TextBox의 일자에 한달을 뺀다
        DateChg = DateAdd("m", -1, DateChg)
    Case KeyCodeConstants.vbKeyRight
        '// TextBox의 일자에 한달을 더한다
        DateChg = DateAdd("m", 1, DateChg)
    Case KeyCodeConstants.vbKeyPageUp
        '// TextBox의 일자에 일년을 더한다
        DateChg = DateAdd("Yyyy", 1, DateChg)
    Case KeyCodeConstants.vbKeyPageDown
        '// TextBox의 일자에 일년을 뺀다
        DateChg = DateAdd("Yyyy", -1, DateChg)
    End Select

    '// 변경된 일자를 TextBox에 돌려준다.
    TextBox1.Text = Format(DateChg, "YYYY-MM-DD")
End Sub
 

 
  참고> KeyCode와 KeyAscii
Sub TextBox1_KeyDown(...), Sub TextBox1_KeyUp(...)의 매개변수에는 KeyCode매개변수가 있고 Sub TextBox1_KeyPress(...)에는 KeyAscii매개변수가 있습니다. 이것은 모두 키와 관련된 것인데, KeyCode는 스캔코드(Scan Code)이며 KeyAscii는 ASCII Code입니다.

ASCII코드는 키보드에 문자를 부여해둔 것입니다. 우리가 ‘A’를 입력하면 컴퓨터는 ASCII코드표에서 ‘A’에 해당하는 값 ‘65’로 이해합니다. 간단히 스캔 코드는 ASCII코드로 나타낼 수 없는 코드를 나타낸다고 생각하면 됩니다. ASCII코드표를 보면 방향 키에 부여된 값은 없습니다. 그래서 방향키를 처리하려면 스캔코드라는 것을 사용하게 됩니다.