본문 바로가기
IT 이모저모/VBA

VBA Byval과ByRef차이점과 활용법

by 내일은맑음 2020. 6. 8.
반응형

간단히 요약하면

 

Byval - 값에 의한 전달

ByRef - 참조에 의한 전달

이다.

 

간단한 예시와 함께 알아보도록 하자.

'메인처리 
' 
Sub Main()
  Dim strMessage_ByRef As String 
  Dim strMessage_ByVal As String 
  strMessage_ByRef = "변경전메세지" 
  strMessage_ByVal = "변경전메세지"
  '참조에 의한 전달 후 메세지 확인
  Call Test_ByRef(strMessage_ByRef)
  Debug.Print "ByRef실행후:" & strMessage_ByRef
 '값에 의한 전달 후 메세지 확인 
  Call Test_ByVal(strMessage_ByVal)
  Debug.Print "ByVal실행후:" & strMessage_ByRef" & strMessage_ByVal
End Sub 
  
'ByRef을 사용한 함수 
' 
Function Test_ByRef(ByRef strMessage As String) 
  
  '파라미터 변경 
  strMessage = "ByRef으로 변경" 
  
End Function 
  
'ByVal을 사용한 경우 
' 
Function Test_ByVal(ByVal strMessage As String) 
  
  '파라미터 변경 
  strMessage = "ByVal으로 변경" 
  
End Function

위의 예시에서 메인을 실행시키면 아래와 같은 결과를 얻을 수 있다.

ByRef실행후 : ByRef으로 변경
ByVal실행후 : 변경전메세지

즉 값에 의한 전달은 파라미터로 받은 변수의 값만 복사해서 가져다 쓰기 때문에

넘겨받은 값이 들어있는 변수에 영향을 주지 못한다.

하지만 참조에 의한 전달은 넘겨받은 변수 그 자체를 가져다 쓰기 때문에 변수에 영향을 준다.

 

Byval - 값에 의한 전달

ByRef - 참조에 의한 전달

반응형