Excel VBA에서 메시지를 표시하기 위해 메시지박스를 띄울 때 MsgBox를 사용합니다.
MsgBox는 메시지를 표시하고 사용자의 응답을 기다리는 대화 상자입니다.
VBA 프로그램이 처리되는 과정에서 적절한 정보를 알려주거나 오류 또는 경고 메시지를 띄워주거나 선택이 필요한 여러 상황에서 사용자의 판단을 선택 받고자 할 때 MsgBox를 사용하게 됩니다.
이번 글에서는 엑셀 VBA에서 메시지박스(MsgBox)를 사용하는 다양한 방법에 대해 예제와 함께 설명해 보겠습니다.
만약 엑셀의 VBA에 대해 익숙치 않으면 엑셀에서 VBA(매크로) 처음으로 시작해 보기를 먼저 읽어 보시기 바랍니다.
VBA에서 MsgBox에 대한 구문 설명 및 기본적인 사용 방법
VBA에서 MsgBox의 기본적은 구문은 아래와 같습니다.
MsgBox (Prompt, [Buttons], [Title], [HelpFile], [Context])
- Prompt : 기본적으로 메시지박스에 표시되는 메시지 내용입니다. 필수로 입력해야 하며 문자열, 숫자 또는 문자열로 변환할 수 있는 기타 값을 지정할 수 있습니다. Prompt 최대 길이는 1024자 입니다.
- Buttons : 메시지박스에 표시될 버튼의 유형이나 아이콘의 스타일을 지정할 수 있습니다. 선택적 입력 사항으로 생략하면 vbOKOnly 버튼이 디폴트로 지정됩니다.
- Title : 메시지박스의 제목을 지정할 수 있습니다. 선택적 입력 사항으로 생략하면 “Microsoft Excel”이 제목 표시줄에 표시됩니다.
- HelpFile : 메시지박스에 사용할 도움말 파일을 지정하는 데 사용됩니다. 선택 사항으로 생략할 수 있습니다.
- Context : 메시지박스의 도움말 항목에 대한 컨텍스트 ID를 설정할 수 있습니다. 선택 사항으로 생략할 수 있습니다.
아래 MsgBox 예제는 가장 기본적인 형태의 MsgBox 사용 예시입니다.
▼ MsgBox의 괄호'()’를 없애고 사용해도 됩니다.
Sub 메시지박스()
MsgBox (“안녕하세요. 느티나무 지식창고 입니다.”)
‘MsgBox “안녕하세요. 느티나무 지식창고 입니다.”
End Sub
|
▼ MsgBox의 인수는 순서대로 입력해야 하며 내용이 없는 경우에도 콤마(,)로 순서를 맞추어 주어야 합니다.
단, 인수명을 지정하면 순서와 상관없이 인수를 사용할 수 있습니다.
VBA Source에 대한 가독성과 오류 방지를 위해 인수명을 지정하고 인수값을 입력하는 방식을 추천합니다.
인수명을 지정할 때 Prompt가 첫번째에 위치할 경우는 생략할 수 있습니다.(MsgBox “안녕하세요. 느티나무 지식창고입니다.”, title:=”안내” )
Sub 메시지박스()
‘MsgBox “안녕하세요. 느티나무 지식창고입니다.”, , “안내”
MsgBox Title:=“안내”, prompt:=“안녕하세요. 느티나무 지식창고입니다.”
End Sub
|
MsgBox의 Prompt 내용을 여러 줄로 표시하고자 할 때
메시지박스에서 메시지 내용이 길어 여러줄로 표시해야할 경우가 있습니다. 또는 메시지 내용을 구분하기 위해 줄을 나누어 표시해야 할 경우도 있습니다.
▼ MsgBox에서 프롬프트 메시지 내용을 줄 바꿈할 때 사용하는 몇 가지 방법에 대한 예제 입니다.
줄 바꿈이 필요한 위치에 텍스트 연결 기호인 앰퍼샌드(&)를 앞 뒤에 붙이고, vbCr, vbNewLine, Chr(10), Chr(13) 중에 하나를 입력하면 해당 위치에 줄 바꿈이 됩니다.
만약 빈 줄을 삽입하고 싶다면 줄바꿈 두번 연속으로 입력하면 됩니다.
Sub 메시지박스()
MsgBox “안녕하세요.” & vbCr & “느티나무 지식창고입니다.” _
& vbNewLine & “블로그 방문을 환영합니다” _
& Chr(10) & “Have a good day!!” _
& Chr(13) & Chr(13) & “Bye~~”
End Sub
|
조건에 따라 서로 다른 MsgBox 결과를 표시하는 방법
메시지박스를 띄울 때 앞의 실행 조건에 따라 서로 다른 내용을 메시지로 띄우는 작업은 정말 많이 하는 작업입니다.
“성공했습니다.” 또는 “실패했습니다.”
“처리되었습니다.” 또는 “처리하지 못했습니다.”
“값이 올바릅니다.” 또는 “값이 올바르지 않습니다.”
▼ 아래 예제는 입력 받은 숫자가 짝수일 때와 홀수일 때 다른 결과의 메시지를 표시하는 MsgBox 예제 입니다.
Sub 메시지박스()
Dim Num As Integer
Num = InputBox(“숫자를 입력하세요.”)
If Num Mod 2 = 0 Then
MsgBox Num & “은 짝수입니다.”
Else
MsgBox Num & “은 홀수입니다.”
End If
End Sub
|
MsgBox에서 다양한 버튼 유형을 적용해서 사용하는 방법
메시지박스에서 버튼을 사용하여 선택된 버튼에 따라 VBA 프로그램의 흐름을 제어할 수 있습니다.
MsgBox에서 사용하는 버튼 유형과 각각의 사용법에 대해 알아보겠습니다.
▼ 버튼 유형
- vbOkOnly : MsgBox의 기본 버튼 유형으로 [확인] 버튼을 표시합니다.
- vbOkCancel : [확인] 및 [취소] 버튼이 표시됩니다.
- vbAbortRetryIgnore : [중단], [다시 시도] 및 [무시] 버튼이 표시됩니다.
- vbYesNoCancel : [예], [아니오] 및 [취소] 버튼이 표시됩니다.
- vbYesNo : [예] 및 [아니오] 버튼이 표시됩니다.
- vbRetryCancel : [다시 시도] 및 [취소] 버튼이 표시됩니다.
▼ 기본 버튼 위치 정의
- vbDefaultButton1 : 첫 번째 버튼을 기본 버튼으로 정의합니다.
- vbDefaultButton2 : 두 번째 버튼을 기본 버튼으로 정의합니다.
- vbDefaultButton3 : 세 번째 버튼을 기본 버튼으로 정의합니다.
- vbDefaultButton4 : 네 번째 버튼을 기본 버튼으로 정의합니다.
▼ 아래 예제는 MsgBox에서 각각의 버튼 유형을 적용한 예제입니다.
Sub 메시지박스()
MsgBox “느티나무 지식창고입니다.”, vbOKOnly
MsgBox “느티나무 지식창고입니다.”, vbOKCancel
MsgBox “느티나무 지식창고입니다.”, vbAbortRetryIgnore
MsgBox “느티나무 지식창고입니다.”, vbYesNoCancel
MsgBox “느티나무 지식창고입니다.”, vbYesNo
MsgBox “느티나무 지식창고입니다.”, vbRetryCancel
MsgBox “느티나무 지식창고입니다.”, vbOKCancel + vbDefaultButton1
MsgBox “느티나무 지식창고입니다.”, vbAbortRetryIgnore + vbDefaultButton2
MsgBox “느티나무 지식창고입니다.”, vbYesNoCancel + vbDefaultButton3
End Sub
|
MsgBox에 아이콘(icon)을 표시하는 방법
메시지박스에 아이콘을 추가해서 시각적인 효과를 줄 수도 있습니다.
오류나 경고 메시지의 경우 아이콘과 함께 메시지박스를 띄워준다면 사용자가 더 직관적으로 오류가 발생했음을 알 수 있습니다.
▼ 아이콘 종류
- vbCritical : 빨간색으로 채워진 원 안에 흰색의 ‘X’가 있는 아이콘으로 중요한 메시지를 표시할 때 주로 사용합니다.
- vbQuestion : 파란색으로 채워진 원 안에 ‘물음표(?)’가 있는 아이콘으로 주로 질문 메시지를 띄울 때 사용합니다.
- vbInformation : 파란색으로 채워진 원 안에 ‘느낌표(!)’가 있는 아이콘으로 주로 정보성 메시지를 띄울 때 사용합니다.
- vbExclamation : 노란색으로 채워진 삼각형 안에 ‘느낌표(!)’가 있는 아이콘으로 주로 경고 메시지를 띄울 때 사용합니다.
▼ 아래 예제는 버튼 유형에 아이콘을 결합해서 메시지박스에 아이콘을 표시하는 예제입니다.
Sub 메시지박스()
MsgBox “느티나무 지식창고입니다.”, vbOKCancel + vbCritical
MsgBox “느티나무 지식창고입니다.”, vbAbortRetryIgnore + vbQuestion
MsgBox “느티나무 지식창고입니다.”, vbOKOnly + vbInformation
MsgBox “느티나무 지식창고입니다.”, vbYesNoCancel + vbExclamation
End Sub
|
MsgBox에서 선택한 버튼의 반환 상수 값을 활용하는 방법
메시지박스에 나타나는 버튼에는 해당 버튼을 선택했을 때 반환되는 상수 값이 있습니다.
VBA 프로그램에서 이렇게 반환되는 버튼 상수 값을 사용하여 서로 다른 프로그램 로직으로 실행되도록 구현할 수 있습니다.
▼ 각 버튼의 반환 상수 값
- [확인] 버튼 : 버튼 코드는 vbOK이고, 반환 상수 값은 1 입니다.
- [취소] 버튼 : 버튼 코드는 vbCancel이고, 반환 상수 값은 2 입니다.
- [중단] 버튼 : 버튼 코드는 vbAbort이고, 반환 상수 값은 3 입니다.
- [다시 시도] 버튼 : 버튼 코드는 vbRetry이고, 반환 상수 값은 4 입니다.
- [무시] 버튼 : 버튼 코드는 vbIgnore이고, 반환 상수 값은 5 입니다.
- [예] 버튼 : 버튼 코드는 vbYes이고, 반환 상수 값은 6 입니다.
- [아니오] 버튼 : 버튼 코드는 vbNo이고, 반환 상수 값은 7 입니다.
▼ 아래 예제는 선택한 버튼의 상수 값 또는 버튼 코드를 IF 문의 조건으로 사용하여 다른 프로세스를 실행하도록 한 예제입니다.
Sub 메시지박스()
Dim btnOption As Integer
btnOption = MsgBox(“계속 진행하시겠습니까?”, vbYesNo)
‘선택 버튼의 반환 상수 값
If btnOption = 6 Then
MsgBox “[예] 선택. 작업을 계속 진행합니다.”
Else
MsgBox “[아니오] 선택. 작업을 종료합니다.”
End If
btnOption = MsgBox(“계속 진행하시겠습니까?”, vbOKCancel)
‘선택 버튼의 버튼코드
If btnOption = vbOK Then
MsgBox “[확인] 선택. 작업을 계속 진행합니다.”
Else
MsgBox “[취소] 선택. 작업을 종료합니다.”
End If
End Sub
|
앞의 예제를 보면 알 수 있듯이 서로 매칭되는 상수 값이나 버튼 코드를 사용하여 동일한 조건으로 체크할 수도 있습니다.
“If btnOption = vbOk Then“은 “If btnOption = 1 Then“과 같은 조건으로 처리됩니다.
마찬가지로 “If btnOption = vbCancel Then“은 “If btnOption = 2 Then“과 같은 조건으로 처리됩니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
이 글이 도움이 되었기를 바랍니다. ^-^