드로우홀릭 더베이직

1. 문제

액세스 VBA에서 함수를 사용할 때, 어떨 때에는 괄호를 사용하고 어떨 때에는 괄호를 사용하지 않아서 헷갈릴 때가 있을 것입니다. 다음 소스코드를 살펴보기 바랍니다.

Public Sub 테스트_함수_괄호()

    Dim strMsg As String
    Dim varAnswer As Variant
    
    varAnswer = InputBox("성함을 말씀해 주십시오.")
    strMsg = "반갑습니다, '" & varAnswer & "' 님!"
    MsgBox strMsg, vbInformation
    
End Sub

6행에서 'InputBox'를 사용할 때에는 괄호를 사용했습니다.
8행에서 'MsgBox'를 사용할 때에는 괄호를 사용하지 않았습니다.
6행이든, 8행이든, 어떤 인수를 함수에 전달하는 것에는 차이가 없습니다. 그런데, 왜 어떨 때에는 괄호를 사용하고, 어떨 때에는 괄호를 사용하지 않아도 될까요?

2. 빠른 해결책

다음 소스코드를 살펴보기 바랍니다.

Public Sub 테스트_함수_괄호()

    Dim strMsg As String
    Dim varAnswer As Variant
    
    varAnswer = InputBox("성함을 말씀해 주십시오.")
    strMsg = "반갑습니다, '" & varAnswer & "' 님!"
    Call MsgBox(strMsg, vbInformation)
    
End Sub

8행의 'MsgBox'를 호출할 때, 'Call' 문을 이용해서 처리했습니다. 이렇게 처리하면 '괄호'를 반드시 사용해야 합니다.

그래서 빠른 해결책은, 함수를 단독으로 사용할 때에는 'Call' 문을 이용하고, 함수에 인수를 전달할 때에는 무조건 괄호를 사용하면 된다는 것입니다.

3. 원리를 알아봅시다.

왜 이런 현상이 나타나는지 그 원리를 알아봅시다.

결론적으로 말하자면, 어떨 때에는 괄호를 사용하고, 어떨 때에는 괄호를 사용하지 않는 것은 VBA(혹은 Microsoft Visual Basic 6)만의 짜증나는 특성입니다. 다른 언어(java, C#, Python 등)에서는 이런 특성이 없습니다. 함수에 인수를 전달할 때에는 무조건 괄호를 사용해야 합니다.

초보를 위한 언어인 VBA에서는 아이러니하게도, 어떨 때에는 괄호를 사용해야 하고, 어떨 때에는 괄호를 사용하면 안 됩니다. (이게 무슨 초보용인지.. ^^)

VBA에서는 함수를 단독으로 사용할 때에는 괄호를 사용하면 안 됩니다. 단독으로 사용하지 않고, 어떤 문장의 중간에 올 때에는 괄호를 사용해야 합니다.
그러면, 단독으로 사용하는 것은 무엇일까요?
문장의 시작이 함수로부터 시작한다면 단독으로 사용한다고 볼 수 있죠.

하지만, 다음 코드처럼, 문장의 중간에 함수와 인수가 있다면, 이것은 단독으로 사용한다고 볼 수 없습니다.

varResult = Int(3.14) + Year(Now())

위 소스코드에서 'Int' 함수와 'Year' 함수는 모두 단독으로 사용되는 것이 아닙니다. 그러니까 인수를 전달할 때 괄호를 사용하고 있는 것이죠.

사실, 설명하기 쉽게 하려고 '단독'이라는 용어를 사용했는데요, 정의는 반환값 여부에 따라 다르다는 점입니다.

프로시저(Sub, Function)를 사용할 때, 반환값이 있을 때에는 괄호를 사용하고, 반환값이 없을 때에는 괄호를 사용하지 않습니다.

이것이 올바른 정의입니다. 여기까지 이해했다면, 괄호를 사용할 때와 사용하지 않을 때가 쉽게 구분될 것입니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
공지 액세스-일반 길벗출판사 / 실무액세스 예제파일(64비트용) [4] 돌직구 2021-01-13 30246
공지 액세스-일반 길벗출판사 / 액세스 2013 무작정 따라하기 정오표 돌직구 2014-10-09 80482
공지 액세스-일반 길벗출판사 / 액세스 2010 무작정 따라하기 정오표 file 돌직구 2012-10-26 125920
49 MS액세스 블로그 번역 액세스(Access) 2013으로 업무용 앱을 만드는 4가지 방법 file 윈드님 2013-07-13 47634
48 SQL Server SQL Server Express 버전별 DB 용량 1 돌직구 2013-05-30 45883
47 액세스-일반 작성자, 작성일시, 수정자, 수정일시 이력 관리 file 돌직구 2012-05-16 42990
46 액세스-일반 한/영 자동 전환 (IME 모드 속성) file 돌직구 2013-04-12 42661
45 MS액세스 블로그 번역 액세스(Access) 2013 웹 앱 만들기 file 윈드님 2013-04-18 40146
44 액세스-일반 액세스에서 자주 사용하는 함수 file 돌직구 2015-07-13 37537
43 MS액세스 블로그 번역 액세스(Access) 2013 과 SQL 서버(SQL Server) file 윈드님 2013-05-13 36012
42 IT일반 Windows 8에서 드래그 & 드롭이 되지 않을 때 file 윈드님 2013-09-12 33526
41 ADP 대용량 해결하기 및 ADP 알아보기 file 돌직구 2014-09-14 33086
40 ADP ADP(Access Data Projects)란 무엇인가? file 돌직구 2012-03-29 32142
39 액세스-일반 액세스 제대로 배우기 돌직구 2021-07-21 31336
38 MS액세스 블로그 번역 쉬운 데이터 입력 file 윈드님 2013-06-18 30403
37 IT일반 우편번호 DB 2014-03-07, 도로명 주소 포함 돌직구 2014-03-12 29332
36 액세스-일반 테이블에 계산 필드 만들기 file 돌직구 2012-03-30 25085
35 IT일반 Dropbox 동기화 vs. SkyDrive Pro 동기화 돌직구 2013-06-06 24658
34 IT일반 맥북을 업무용으로 구입하고 싶으세요? 돌직구 2013-09-04 23947
33 액세스-DB 관리 시작 옵션 무시하지 못하도록 설정하기 file 돌직구 2012-03-31 22848
32 MS액세스 블로그 번역 액세스(Access) 테이블, 자동으로 재연결하기 file 1 윈드님 2013-05-02 22762
31 MS액세스 블로그 번역 액세스(Access) 2013 소개 file 윈드님 2013-04-15 20863
30 액세스-일반 '필수' 속성과 '빈 문자열 허용' 속성 알아보기 file 돌직구 2014-11-21 19931


  주소  12925 경기도 하남시 미사대로 540, B동 917호 (현대지식산업센터 한강미사2차) ㈜팀데이터이십일  |  고객센터 전화번호  02-467-2998  |  대표이사  염기웅
개인정보관리책임자  염기웅 (ml_privacy@td21.com)  |  사업자등록번호  120-86-79260  |  통신판매업신고번호  제 2021-경기하남-1166 호  [사업자 정보 확인]
  TD21의 사전 서면 동의 없이 TD21 사이트 일체의 정보, 콘텐츠 및 UI 등을 상업적 목적으로 전시, 전송, 스크래핑 등 무단 사용할 수 없습니다.