본문 바로가기
Excel/VBA 공부

얼렁뚱땅 엑셀 VBA] 매개변수의 전달 - ByRef, ByVal

by excelnote2 2017. 5. 24.


프로시저에 매개변수를 전달하는 방법.



ByVal - 값에 의한 전달


ByRef - 참조에 의한 전달(디폴트)




프로시저 작성에 별다른 표기를 하지 않으면 참조에 의한 전달(ByRef)을 기본적으로 적용한다. 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub mainPro()
    Dim i As Integer
    Dim j As Integer
    
    i = 10  '메인프로세스에서 변수값 10으로 저장
    j = 10
 
    Call subPro(i, j)  '서브프로세스 호출
 
    MsgBox "i : " & i & " , " & "j : " & j
 
End Sub
 
-----------------------------------------------------
 
Sub subPro(ByVal i As Integer, ByRef j As Integer)
' i와 j를 넘겨받아서 실행
' i는 값으로 넘겨받아서 999로 저장
' j는 참조로 넘겨받아서 999로 변경
    i = 999
    j = 999
End Sub
cs








위 그림에서 보면 값으로 전달한 i는 메인 프로세스로 돌아와도 서브 프로세스에서의 값 변경이 적용되지 않는다. 



결론적으로 메인 프로시저와 서브 프로시저간에 변수를 공유하면서 사용할 때는 ByRef를 사용하고, 특정 프로시저에서만 사용할 경우는 ByVal을 사용한다고 생각하면 될듯. 


댓글