본문 바로가기

EXCEL/VBA

엑셀 InputBox 함수와 메소드의 차이(VBA 오류의 원인?)

PC로 업무를 보거나 물건을 사거나 할 때 흔히 접할 수 있는 대화상자 중 하나가 InputBox 입니다.

사용자의 상태를 확인할 수 있는 PC와 사용자간의 정보를 주고받는 상자로만 알고있었는데 InputBox는 함수가 있고 메소드가 있다고 합니다. 


저는 이 차이를 알기전에 InputBox에서 에러가 발생하는 경우가 있었는데 왜? 에러가 발생하는지 정확히 이해를 못했던것 같습니다. 만약 코딩 중 InputBox에서 오류가 발생한다면 이글을 유심히 읽어보셔야 합니다.



 

 InputBox 함수와 InputBox 메소드의 차이점



1. InputBox 함수와 메소드 형식의 차이는 InputBox 앞에 Application.을 넣어 주면 메소드가 되며 생략하면 함수가 됩니다.

2. 두 형식의 가장 큰 차이는 반환하는 데이터형의 Type 지정이 가능한가 입니다.

3. 이 차이는 사용자가 입력 실수가 있을때 이후 처리과정에 큰 차이를 나타냅니다.


 

 InputBox 메소드


변수 = Application.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextID, Type)


InputBox 함수는 대화상자에서 [확인]을 하면 입력한 값을 [취소]를 하면 FALSE가 반환됩니다.



☞ InputBox(메소드)의 인수

    • Prompt : 대화상자에 표시할 메시지, 필수로 입력해야 함
    • Title : 대화상자의 제목, 생략시 "입력" 표기 됨
    • Default : 대화상자가 나타날때 입력란에 미리 들어갈 문자열, 생략시 공란
    • Left : 대화상자의 좌측 위치 포인트, 생략시 중앙에 위치
    • Top : 대화상자의 상단 위치 포인트, 생략시 중앙에 위치
    • HelpFile : 도움말 파일명
    • HelpContextID : 도움말 항목으로 지정한 컨텍스트 번호
    • Type : 반환하는 데이터형, 생략시 문자열


☞ Type의 인수


Type

반환형태

Type

반환형태

0

수식

8

셀 참조

1

숫자

16

오류값

2

문자열

64

값의 배열

4

논리값

생략

문자열


※ 두가지의 인수타입을 모두 사용하고 싶은 경우는 각 Type을 합을 입력하면 됩니다. (예 : 숫자와 문자의 데이터형 모두 입력하고 싶은 경우 1 + 2 = 3 )


Sub Inputbox예제1()


Dim 이름 As String

Dim 비밀번호 As Integer


이름 = Application.InputBox("이름을 입력하세요.", "이름 입력", , , , , , 2)

비밀번호 = Application.InputBox(Type:=1, Prompt:="비밀번호를 입력하세요.", Title:="비밀번호 입력", Default:="숫자 6자리")


End Sub



1. 인수의 입력은 순서에 맞게 입력하여야 하지만 인수명을 기입한는 경우는 순서와 , 없이 입력이 가능합니다.

2. 비밀번호의 반환 데이터형을 숫자로 지정하였지만 문자를 입력 해보겠습니다.



3. 잘못된 데이터형을 입력하는 경우 경고메세지가 나타나며 [확인]을 눌러 다시 입력을 하면 됩니다.




 

 InputBox 함수


변수 = InputBox(Prompt, Title, Default, Left, Top, HelpFile, Context, Type)


InputBox 함수는 대화상자에서 [확인]을 하면 입력한 문자열을 [취소]를 하면 "" 공란이 반환됩니다.


☞ InputBox(함수)의 인수

    • Prompt : 대화상자에 표시할 메시지, 필수로 입력해야 함
    • Title : 대화상자의 제목, 생략시 "Microsoft Excel"이 표기 됨
    • Default : 대화상자가 나타날때 입력란에 미리 들어갈 문자열, 생략시 공란
    • Left : 대화상자의 좌측 위치 포인트, 생략시 중앙에 위치
    • Top : 대화상자의 상단 위치 포인트, 생략시 중앙에 위치
    • HelpFile : 도움말 파일명
    • Context : 도움말 항목으로 지정한 컨텍스트
Sub Inputbox예제2()


Dim 이름 As String

Dim 비밀번호 As Integer


이름 = InputBox("이름을 입력하세요.", "이름 입력")

비밀번호 = InputBox("비밀번호를 입력하세요.", "비밀번호 입력", "숫자 6자리")


End Sub


1. InputBox 함수는 InputBox 메소드와 달리 Type 인수가 없습니다. 선언한 변수와 다른 데이터값을 입력 해보겠습니다. 



2. 오류창이 나타나며 진행이 중단 됩니다. 이 경우는 [확인]을 하거나 [취소]를 하거나 모두 오류가 발생합니다.



※ 일반적으로 문자열의 데이터형을 반환하는 경우라면 InputBox 함수를 사용해도 무관하지만 그렇지 않고 정확한 데이터형의 값을 반환받고 싶은 경우라면 InputBox 메소드 형식을 사용하는 것이 유용하겠습니다.

만약 InputBox 구문에서 오류가 발생해서 해결이 힘들다면 InputBox 함수 대신 InputBox 메소드 형식을 사용해보세요. ^^



 

 관련글 보기


 MsgBox

  

02

  

03