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

제품:   Excel 버전:   공통
검색어:   TextBox, Change
제목:   TextBox 컨트롤의 Change 이벤트
     
 

  STEP> TextBox 컨트롤
좋은 프로그램이 갖추어야 할 덕목 중 하나는 사용자를 배려하는 것입니다.

가령 사용자가 어떤 데이터를 입력하기 전까지는 폼의 일부 컨트롤을 비 활성화시켜 두는 것입니다. (사용자는 어린 애와 같아서 무슨 짓(?)을 할지 모르죠)

가령 다음과 같은 사용자 정의 폼이 있다고 가정합니다.

만드는 사람은 사용자가 텍스트 상자에 입력을 하리라 예상 할 것입니다. 그러나 아무 입력 없이 OK버튼을 클릭할 수 도 있겠죠. 이런 가능성에 대비하여 만드는 사람은 TextBox컨트롤의 Text값의 길이를 검사하는 코드를 넣습니다.

If Len(TextBox1.Value) =0 Then Exit Sub

또 다른 방법은 사용자가 TextBox에 무언가를 입력하기 전까지 ‘OK’라는 CommandButton컨트롤을 비 활성화 시켜 두는 겁니다.

TextBox에 입력을 하게 되면 내부적으로 Change이벤트가 발생합니다. Change 이벤트를 이용하여 사용자가 무엇을 입력하고 있는지를 검사할 수 있습니다.

TextBox컨트롤의 Change이벤트를 다음과 같이 작성합니다.

Private Sub TextBox1_Change()
CommandButton1.Enabled = CBool(Len(TextBox1.Value))
End Sub


TextBox1 컨트롤에 아무 것도 입력되지 않는다면 Len()함수는 0을 돌려줄 것입니다. 그리고 CBool()함수는 0을 False값으로 돌려줍니다.

따라서 CommandButton1의 Enabled속성은 False값을 가져 비 활성화됩니다.

그러나 TextBox1 컨트롤에 무언가 입력된다면 Len()함수는 입력된 문자의 개수를 돌려줄 것입니다. 그리고 CBool()함수는 0이 아닌 값을 True값으로 변경합니다. 따라서 CommandButton1의 Enabled속성은 True값을 가져 활성화됩니다.

두 가지의 방법 중 어느 것을 선택할지는 만드는 사람 마음입니다. 그러나 두 번째 방법은 사용자가 텍스트 상자에 무언가를 입력해야 하겠구나 하는 느낌을 줍니다. (이것은 생각해서가 아니라 다른 프로그램을 통해 얻은 학습의 결과겠죠)

그래서 두 번째 방법이 첫번째 방법보다는 나으리라 봅니다.
 

  참고> True와 False
숫자 0은 언제나 False값을 의미합니다. 그리고 반대로 0이 아닌 기타의 숫자 값은 True입니다. 이것은 VBA뿐만 아니라 다른 언어에서도 마찬가지이므로 기억해두면 편리할 것입니다.