Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

Variables|Static|Range|Public|Private|Dim|
|ActiveSheet|Buttons|Caption|Procedure Level Variable|
|Module Level Variable|Project Level Variable|

프로시져내부에서 계속 살아있는 Static변수

변수는 임시로 메모리를 빌려서 사용한다고 했다
그렇다면 메모리의 임대기간이 언제까지 인가??
자원의 절약차원에서 쓸데없이 빈집을 만들어 두고 있을 필요는 없는것이다
역할이 끝나면 변수는 사라 지는것이다
아래의 버튼을 크릭할때마다 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]

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