※ 오늘 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이 아닌
경우를 의미합니다.
|