이번에는 '고의적으로' 에러를 발생시켜 문제를 해결하는 과정에 대해 이야기 해보도록 하겠습니다.
******************************************************************************
지금부터 할 이야기는 이 구문을 이런 식으로도 사용할 수 있다는 '예시'입니다.
찾아본다면 보다 더 편하고 좋은 다른 방법이 있을 수 있다는 것을 미리 밝혀둡니다.
******************************************************************************
계산기와 같은 프로그램을 만들 때,
특정 텍스트 박스에는 반드시 숫자를 입력받아야만 하는 경우가 있습니다.
이 때 활용할 수 있는 방법들 중 하나가 On Error 구문인데요,
이를 어떤 식으로 활용할 것이냐면...
입력받은 텍스트를 Integer와 같은 유형의 형태로 형변환을 시켜보는 것입니다.
여기서 만일 String이 포함되어 있다면 에러가 발생하겠죠?
그럼 On Error 구문에 의해 에러 처리 부분으로 넘어가게 될 것이고,
에러 처리 부분에서 이를 정정하게끔 하면 되는 것이죠.
이를 코드로 구현해 본다면 다음처럼 꾸미면 될겁니다.
(편의상 Cint를 사용합니다.)
이 라인의 존재 의의는... 그렇습니다.
우리의 멍청한 VB/VBA는 공백인 텍스트 박스의 텍스트를 Int로 형변환 하여도
어김없이 '에러'를 발생시켜 줍니다. (그냥 0으로 인식할 것이지... -ㅁ-;;)
그렇기 때문에 텍스트 박스가 공백일 경우에는 에러를 발생시키지 않게끔 하기 위해
이 라인을 넣어서 미리 선수를 친 것입니다.
라인4
굳이 0이 아니어도 됩니다.
단순히 Textbox1.Text가 에러 없이 형변환 되느냐,
아니면 에러가 발생하느냐를 판단하기 위한 부분이니까요.
에러 발생 시, 라인2에 의해 라인7의 Err:이 수행되게 됩니다.
라인8
위와 같은 상황에서의 에러 유형 넘버는 13입니다.
저 13이란 숫자를 굳이 기억하지 않아도 상관 없습니다.
잊어버려도 Msgbox등을 통해 Err.Number를 출력해보면 알 수 있으니까요.
라인9~11오류를 정정하는 부분입니다.
여기에서는 에러 메세지를 출력해주고,
해당 텍스트 박스의 값을 지운 후, 포커스를 재지정 합니다.
이런 식으로 처리를 해 두면,
프로그램을 수행하는 도중에 에러가 발생하는 것을 미연에 방지할 수 있습니다.
사소한 부분이지만 보다 완성도 높은 프로그램을 만들기 위해
'이런 것도 있다'는 정도라도 생각해 주시면 좋겠습니다.
******************************************************************************
지금부터 할 이야기는 이 구문을 이런 식으로도 사용할 수 있다는 '예시'입니다.
찾아본다면 보다 더 편하고 좋은 다른 방법이 있을 수 있다는 것을 미리 밝혀둡니다.
******************************************************************************
계산기와 같은 프로그램을 만들 때,
특정 텍스트 박스에는 반드시 숫자를 입력받아야만 하는 경우가 있습니다.
이 때 활용할 수 있는 방법들 중 하나가 On Error 구문인데요,
이를 어떤 식으로 활용할 것이냐면...
입력받은 텍스트를 Integer와 같은 유형의 형태로 형변환을 시켜보는 것입니다.
여기서 만일 String이 포함되어 있다면 에러가 발생하겠죠?
그럼 On Error 구문에 의해 에러 처리 부분으로 넘어가게 될 것이고,
에러 처리 부분에서 이를 정정하게끔 하면 되는 것이죠.
이를 코드로 구현해 본다면 다음처럼 꾸미면 될겁니다.
(편의상 Cint를 사용합니다.)
- Private Sub TextBox1_Change()
- On Error GoTo Err
- If TextBox1.Text = "" Then
- Elseif Vba.CInt(TextBox1.Text) > 0 Then
- End If
- Exit Sub
- Err:
- If Err.Number = 13 Then
- MsgBox "숫자만 입력할 수 있습니다.", vbCritical, "Error"
- TextBox1.Text = ""
- TextBox1.SetFocus
- End If
- End Sub
이 라인의 존재 의의는... 그렇습니다.
우리의 멍청한 VB/VBA는 공백인 텍스트 박스의 텍스트를 Int로 형변환 하여도
어김없이 '에러'를 발생시켜 줍니다. (그냥 0으로 인식할 것이지... -ㅁ-;;)
그렇기 때문에 텍스트 박스가 공백일 경우에는 에러를 발생시키지 않게끔 하기 위해
이 라인을 넣어서 미리 선수를 친 것입니다.
라인4
굳이 0이 아니어도 됩니다.
단순히 Textbox1.Text가 에러 없이 형변환 되느냐,
아니면 에러가 발생하느냐를 판단하기 위한 부분이니까요.
에러 발생 시, 라인2에 의해 라인7의 Err:이 수행되게 됩니다.
라인8
위와 같은 상황에서의 에러 유형 넘버는 13입니다.
저 13이란 숫자를 굳이 기억하지 않아도 상관 없습니다.
잊어버려도 Msgbox등을 통해 Err.Number를 출력해보면 알 수 있으니까요.
라인9~11오류를 정정하는 부분입니다.
여기에서는 에러 메세지를 출력해주고,
해당 텍스트 박스의 값을 지운 후, 포커스를 재지정 합니다.
이런 식으로 처리를 해 두면,
프로그램을 수행하는 도중에 에러가 발생하는 것을 미연에 방지할 수 있습니다.
사소한 부분이지만 보다 완성도 높은 프로그램을 만들기 위해
'이런 것도 있다'는 정도라도 생각해 주시면 좋겠습니다.
'컴퓨터' 카테고리의 다른 글
[Plugin] 포토샵 ICO 포맷 플러그인 (2) | 2009.09.20 |
---|---|
[Utility] 버추얼덥 및 코덱 (X264, Xvid) (1) | 2009.09.19 |
[Utility] SMI Mass Production Tool (2) | 2009.09.18 |
[Javascript] 더블클릭으로 페이지 상하단 이동하는 자바스크립트 (0) | 2009.07.04 |
[Linux] 압축 명령어 정리 (0) | 2009.07.03 |
[Vb/Vba] On Error 구문 #1 (0) | 2009.07.01 |
[Vba] 기본 VBA 함수가 사용되지 않을 시 대처법 (0) | 2009.07.01 |
[Vb/Vba] 텍스트 박스에서 한영전환 방법 (0) | 2009.07.01 |
[Ftp/Server] FileZilla 를 이용한 FTP 서버 구축 (0) | 2009.07.01 |
[HTML] 표 그리기 (0) | 2009.07.01 |
IE9 이상으로 브라우저를 업그레이드하거나, 크롬, 파이어폭스 등 최신 브라우저를 이용해주세요.