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

제품:   Excel 버전:   공통
검색어:   Inputbox메소드, Inputbox함수
제목:   Inputbox메소드와 Inputbox함수
     
 

새 페이지 1

  STEP> 따라하기
 

※ 오늘 Daily Tip은 곽승주님이 제공해주신 내용입니다.

필자의 초보시절에 Inputbox라는 것을 알고 있었습니다.
어느 순간 Application.Inputbox라는 것이 눈에 뛴 적이 있었습니다.
"
~ Inputbox를 이렇게도 사용하나 봐" 하고 지나쳤습니다. 그런데 이게 메소드라고 하더군요. "어 이상하다 분명 함수라고 했는데..." 

혹시 VBA를 처음 하시는 분들 중에도 저와 같은 경험을 하신 분도 있으리라 봅니다. 그리고 헷갈리는 분도 계실 거라 생각합니다. 오늘은 두 개의 Inputbox를 가지고 이바구(잡담)을 떨까 합니다.  

대개 처음 만나는 것이 Inputbox()함수입니다. 이것은 Visual Basic 것입니다. 그리고 단순히 사용자로부터 문자열을 받아서 문자열을 돌려줍니다. 전형적인 사용 예는 다음과 같습니다.

Sub demo_InputBox()
    Dim strResp     As String
    Dim sPrompt     As String
    Dim sTitle      As String
    Dim sDefault    As String

    sPrompt = "자신의 이름을 입력하세요"
    sTitle = "
사용자 이름"
    sDefault = "sjoo"

    strResp = InputBox(Prompt:=sPrompt, Title:=sTitle, Default:=sDefault)
    Debug.Print strResp

End Sub

strResp 변수는 Inputbox()함수가 돌려주는 값을 받으려는 변수입니다. 문자열을 돌려줄 것이므로 strResp 변수의 데이터형은 당연히 String입니다. Inputbox()함수의 매개변수로 Prompt, Title, Default 등등이 있습니다.
(
기타  XPos, YPos, Helpfile,.. 등의 매개변수가 있지만 자주 사용하지 않는 거라 소개하지 않습니다

Prompt Inputbox 대화상자에 표시하는 텍스트입니다. 이것은 MsgBox의 그것과 같은 것입니다. Title 역시 MsgBox와 마찬가지로 대화상자의 제목을 표시하는 텍스트입니다. 그리고 Default는 기본 값으로 보여줄 데이터 입니다. 위의 그림에서 'sjoo'라는 문자열이 보이시죠. 대화상자가 화면에 뜰 때 기본적으로 입력된 데이터입니다

위의 대화상자에서 취소버튼을 클릭하면 되돌려주는 값은 없습니다. 이를 확인하려면 문자열의 길이를 돌려주는 Len()함수를 사용하면 됩니다. 

Application.Inputbox()메소드는 Inputbox앞에 있는 Application의 것입니다. 이것은 Inputbox()함수에 비해 다양한 종류의 데이터를 받아서 돌려줄 수 있습니다. 텍스트뿐만 아니라 수식, 숫자, 논리값, 셀 주소 등이 있습니다. 

다양한 종류의 데이터를 처리하기 위해 Inputbox()메소드의 매개변수에서는 Type이라는 매개변수가 있습니다. Type값에 무엇을 주느냐에 따라 어떤 데이터형을 받아서 돌려줄 것인지가 정해집니다. 다음은 Type매개변수에 지정하는 값과 그 의미입니다.

 의 미
0  수식
1  숫자
2  텍스트(문자열)
4  논리값(True 또는 False)
8  Range 개체와 같은 셀 참조
16  #N/A와 같은 오류 값
64  값의 배열

만일 문자열도 입력 받아야 하고 숫자도 받아야 한다면 어떡할까요? Type에 허용 값의 합을 사용하면 됩니다. Type 1 + 2로 설정하면 됩니다

다음은 자주 사용하는 셀 참조를 다루는 예입니다.

Sub demo_ApplicationInputboxWithType8()
    Dim rngResp     As Range
    Dim sPrompt     As String
    Dim sTitle      As String
    Dim sDefault    As String

    sPrompt = "셀 영역을 선택하세요"
    sTitle = "
셀 영역 선택"
    sDefault = ActiveCell.Address

    On Error GoTo ErrHandler
    Set rngResp = Application.InputBox(Prompt:=sPrompt, Title:=sTitle, Default:=sDefault, Type:=8)
    If Not rngResp Is Nothing Then Debug.Print rngResp.Address

ErrHandler:
    On Error GoTo 0

End Sub

위의 코드에서 Inputbox()메소드가 돌려주는 데이터형은 Range형 데이터입니다. Type '8'로 지정했으니까요. 그래서 Inputbox()메소드가 돌려주는 데이터를 받으려는 변수 rngResp의 데이터형도 Range입니다.

Inputbox()함수와 마찬가지로 사용자가 취소버튼을 클릭하면 아무 것도 돌려주지 않습니다. 그래서 이를 확인할 필요가 있습니다. 이는 rngResp변수가 Nothing인가를 확인해보면 됩니다. rngResp변수는 개체형 변수이므로 Nothing 여부로 확인합니다.

If Not rngResp Is Nothing Then

위의 코드는 'rngResp Nothing이다' Not 연산자를 사용하여 Nothing이 아닌 경우를 의미합니다.