ID:
PW:

     0 분
     1 분

프로그래밍 Tips
프로그래밍에 관한 Tip을 공유하는 곳입니다.


[VBA] 변수 scope
이석종  2020-09-09 09:12:20, 조회 : 349, 추천 : 81

VBA는 Microsoft가 만든 프로그램은 물론 윈도우에서 돌아가는 여러 프로그램들에서 지원하는 프로그래밍 플랫폼이다.
basic이라는 좀 오래된 언어를 쓰고 있지만 Excel, word, access 등 MS의 소프트웨어와 AutoCAD와 같은 프로그램에서도 사용이 가능하다.

VBA Editor를 띄우면 각 프로그램의 파일이 있고 그 파일 안에 소스드가 들어가는 형태다 즉 Excel의 경우에는 엑셀파일에 같이 저장된다. AutoCAD의 경우에는 dvb라는 별도의 파일로 저장된다.

Excel이건 AutoCAD거 모두 module을 추가하다록 되어있다. 모듈은 함수들의 묶음들로 보면 된다. 이 모듈을 import하거나 export할 수 있다. 다른 언어에서 하나의 소스코드에 해당하는 것이다.

예를 들어 모듈 추가하기를 눌러서 module1을 추가했다면 여기에 aaa()라는 sub와 bbb()라는 sub를 정의할 수 있다.

그렇다면 module1에 있는 함수에서 modeul2에 있는 함수를 불러다 쓸 수 있을까? 당연히 있다. 예를 들어 module2에서 module1의 aaa()를 쓰고 싶다면  call modul1.aaa()로 불러서 쓸 수 있다.

그렇다면 변수들은 어떻게 될까? 프로그램을 만들다보면 각 함수들에서 공통으로 사용해야할 변수들이 있다.

결론부터 말하자면
public은 해당 모듈에서 사용이 가능하다
global은 모든 모듈에서 사용이 가능하다.

아래와 같이 module1과 module2에 aaa, bbb,ccc함수를 정의해보자.
module1의 bbb와 module2의 ccc는 내용은 같은 함수이다.
하지만 두 함수 실행결과는 다르다.

bbb함수를 실행하면 값들이 모두 출력되자만
ccc함수를 실행하면 dim과 public의 값은 출력되지 않는다.

따라서 module 간을 넘나들면서 사용할 수 있는 변수는 global로 선안하면 된다.

------

module1
   +-- aaa()
   +-- bbb()

module2
   +-- ccc()

varible scope test code

<Module1>
Dim d As String
Public p As String
Global g As String

Sub aaa()
  a = "dim"
  p = "public"
  g = "global"
End Sub


Sub bbb()
  Call aaa
  MsgBox "dim: " & d & " Public: " & p & " Global : " & g
End Sub

<Module2>

Sub ccc()
  Call Module1.aaa
  MsgBox "dim: " & d & " Public: " & p & " Global : " & g
End Sub


  추천하기   목록보기

Copyright 1999-2022 Zeroboard / skin by zero
구조설계의 미래를 준비하는 모임 [구조설계미래포럼]