코린이는 궁금증이 생겼다.
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 안붙여도 잘 불러왔는데, 2개 이상이면 call을 붙여야 함수가 정상적으로 작동된다.
이유는 알 수 없다..
'컴퓨터 공부 > 엑셀 & VBA' 카테고리의 다른 글
[엑셀vba] getElementsByClassName '13' 런타임 오류 (0) | 2020.11.18 |
---|---|
[엑셀vba ] Option Explicit 역할 (0) | 2020.11.16 |
[엑셀vba] debug.print 사용하기 (0) | 2020.11.16 |
[엑셀vba] 열려있는 인터넷 익스플로러를 컨트롤 해보자 (7) | 2020.10.23 |
[엑셀vba] 시트를 완전히 숨겨보자(숨기기 취소에도 안보임) (0) | 2020.10.23 |