컴퓨터 공부/엑셀 & VBA

[엑셀vba] private sub, sub 차이가 뭘까

도 박사 2020. 11. 16. 16:08
반응형

코린이는 궁금증이 생겼다.

 

private sub, sub 의 차이가 뭘까?

 

영어 뜻만본다면 대충 어떤건지 감이 오긴하지만 직접 알고 싶어서 테스트를 해봤다.

 


 

1
2
3
4
5
Sub 더하기_함수(ByVal A As Integer)
    
    Debug.Print A + A
 
End Sub
cs

모듈1

 

1
2
3
4
5
6
Option Explicit
Sub 결과()
    
    더하기_함수 (A)
 
End Sub<
cs

모듈2

 

* Sub 더하기_함수(byval A as integer): 숫자를 전달받으면 전달 받은 숫자를 더해서 직접 실행창에 보여주는 함수

 

* Sub 결과: 더하기_함수를 호출하고 파라미터를 전달하는 함수.

(더하기 함수는 Module1, 결과 함수는 Module2에 작성하였음)

결과

너무나 당연하게도 10이라는 숫자가 나타났다.

하지만 Sub 더하기_함수를 private sub으로 바꾸고 실행해봤더니...

 

오우 쉩!

더하기_함수가 정의되지 않았다며 오류가 나는구먼!

 

혹시나 함수 이름 앞에 call을 붙이면 되지 않을까? 해서 붙였지만...

 

역쉬..

call을 붙여도 오류가 난다.

 

그래서 더하기_함수가 있는 Module1에 결과 함수를 넣어 실행해봤다.

 

같은 모듈에 모아봤다
오우 성공!

실험으로 알게된 결과.

Private Sub는 같은 모듈안에서만 사용 가능하다.

Sub는 어떤 모듈에서도 호출하여 사용 할 수 있다.

 

전역변수, 지역변수 개념과 같다고 볼 수 있겠다.


번외.

 

함수 테스트 하면서 알게된 이상한 정보

 

보통 함수 호출할 때는 call을 붙여서 사용하는데 인자 값이 한 개만 필요할 땐 call을 안써도 호출이 되고

 

2개 이상일 때는 call을 붙여야 오류가 나지 않는 사실을 알 수 있었다. 

 

Option Explicit
Sub 더하기_함수(ByVal A As Integer, ByVal B As Integer)
    
    Debug.Print A + B

End Sub

Sub 결과()
    
    더하기_함수 (6,8)
    
End Sub

더하기_함수에 인자를 2개로 설정하고 호출 할 때 6,8의 값을 넣었는데 

 

컴파일 오류라며 "="이 필요하다고 한다. 

 

오류 발생

하지만 call 더하기_함수(6,8)을 하게되면 함수가 정상적으로 실행된다.

Call의 중요성
실행 결과

파라미터가 한 개거나 없을 때는 call 안붙여도 잘 불러왔는데, 2개 이상이면 call을 붙여야 함수가 정상적으로 작동된다. 

 

이유는 알 수 없다..


 

반응형