변수는 임시로 메모리를 빌려서 사용한다고 했다 그렇다면 메모리의 임대기간이 언제까지 인가?? 자원의 절약차원에서 쓸데없이 빈집을 만들어 두고 있을 필요는 없는것이다 역할이 끝나면 변수는 사라 지는것이다 아래의 버튼을 크릭할때마다 A라는 문자가 하나씩 추가되게 하고 싶고 30개가 되면 다시 1개에서 부터 다시 시작하고 싶다 아래의 버튼을 크릭해 보시기 바란다 아무리 계속 눌러도 1개밖에 만들어지지 않는다 아래의 버튼을 크릭해 보시기 바란다 은행의 자동현금인출기에서 잘못된 패스워드를 몇번을 계속 입력하면 은행에 다시 찾아갈때까지.. 락이 걸려버린다 그런 장치가 별것인가..위와 같은것이지
Sub makeString_3() ''아래와 같이 Dim대신에 Static을 사용하면 ''계속 변수는 살아남게 된다 Static intX As Integer Dim intY As Integer Dim strX As String intX = intX + 1 If intX > 30 Then intX = 1 For intY = 1 To intX strX = strX & "A" Next Range("C3") = strX Range("C4") = intX End Sub
Static변수가 아닌것은 프로시져가 끝나면(End Sub,End Function) 변수가 갖고 있던 값이 사라지지만 Static변수는 그대로 값을 유지하는것이다 위에서 If intY=30 Then intY=1 이 없다면 계속 한없이 갈것이다 If문은 제어장치가 된것이다 그래서 If 문이나 Select문은 Cotrol Statement라고도 한다 나중에 볼것을 미리 조금씩 본다 Static Variable
여러개의 프로시져가 공동으로 사용할 변수도 필요하지 않을까?? 공동으로 활용하는 자원이 되는것이다 아래의 세개의 버튼을 교대로 크릭해 보시기 바란다 첫째버튼은 X자를 두번째버튼은 Y자를 세번째버튼은 Z자를 연속적으로 붙여나가고 역시 30개의 문자가 되면 다시 첫글자 부터 다시 시작한다 온라인 께임에서 하나의 자원을 공동으로 공격한다거나 하려면 공동의 자원을 서로 공유해야 한다 컴퓨터에서 자원이라함은 정보..이고 결국은 변수인것이다 또한 혼자서 독점적으로 사용할 정보냐.. 아니면 공동으로 사용할 정보냐..그런 차이가 있는것이다
'외부에 선언된 변수를 3개의 프로시져에서 공동으로 사용한다 Public intX As Integer '첫번째버튼 Sub btnOne() intX = intX + 1 If intX >= 30 Then intX = 0 Range("C4") = "X" Else Range("C4") = Range("C4") & "X" End If End Sub '두번째버튼 Sub btnTwo() intX = intX + 1 If intX >= 30 Then intX = 0 Range("C4") = "Y" Else Range("C4") = Range("C4") & "Y" End If End Sub '세번째버튼 Sub btnThree() intX = intX + 1 If intX >= 30 Then intX = 0 Range("C4") = "Z" Else Range("C4") = Range("C4") & "Z" End If End Sub
위의 내용은 엑셀에서 실행할 구문이고 위의버튼에서 실행한것은 웹상의 스크립터로 유사하게 표현한것이다 그러니 위의 코드를 복사하여 모듈시트에 붙여놓고 해보시기 바란다 그렇지 않으면 화일을 다운 받아서 보시면 더욱 좋을것이고.. 실은 위의 구문은 중복되는 구문이 아주 많다 아래와 같이 다시 작성해본자 이번에는 모듈시트를 한장 더 삽입하고 Global변수라는 개념을 아는 기회가 되도록 하자
Dim키워드는 Private와 같은 의미이다 이것과 대별되는것은 Public키워드이다 프로그래밍은 여러개의 프로시져가 한장의 모듈시트에 모이고 또 모듈시트는 여러장으로 구성될수 있다 그렇다면 모듈시트를 한장 추가하고 이곳에서 다른 모듈시트에 있는 전역변수를 참조할수 있을까??
'아래의 프로시져는 Module2시트에 작성되고 '3개의 버튼이 공동으로 사용하면서 'Module1시트의 intX변수를 참조하고 있다 Sub simplify() Dim sX As String sX = ActiveSheet.Buttons(Application.Caller).Caption intX = intX + 1 If intX >= 30 Then intX = 0 Range("C4") = sX Else Range("C4") = Range("C4") & sX End If End Sub
프로시져내부에서 사용하는 변수 Procedure-Level Variable(Local Variable지역변수) 같은 모듈시트내의 외부에 선언하고 사용하는 변수는 Module-Level Variable(Global Variable전역변수) 다른 모듈시트에 선언하고 다른 모듈시트에서 사용하는 변수는 Project-Level Variable(Global Variable전역변수) 3단계로 구분할수 있다 위에 예문들은 변수를 알기위한 작업이면서 다음에 나올 구문들이 섞여있어서 이해하기 곤란할수 있다 뒤의 것을 보면서 다시 와서 보시면서 숙달시키시기 바란다 언어는 한번 씨익 보고 끝나는것이 아니고 숙달시켜야 하는것이다 Use Global Variable