VBA 프로시져 형식과 범위 질문

VBA 프로시져 형식과 범위 질문

작성일 2007.05.23댓글 1건
    게시물 수정 , 삭제는 로그인 필요

1번경우

 

private sub command1_clik()

 

dim i as integer

dim a as integer

.

.

.

end sub

 

===============

2번경우

 

private as integer

 

=============

 

프로시져 형식에는 sub, function, property    프로시져 범위에는 public, private, dim, static 이 쓰인다는데...

 

1번의 경우에는 private 가 프로시져 선언할때 쓰였고

2번의 경우에는 private 가 변수 선언할때 쓰였네요......

어떤 차이가 있는건지.. 왜 이렇게 쓰는지 고수님들 부탁 드려요...


#vba 프로시저 #vba 프로시저 호출 #vba 프로시저가 너무 큽니다

profile_image 익명 작성일 -

도움말 보다 더 자세한 설명은 없을 듯 합니다.

 

VBA를 시작하시고자 한다면 반드시 도움말을 찾아가며 익혀가시는 것에 익숙해 지셔야 합니다.

 

아래의 출처: VBA도움말에서

범위와 가시성 설명

   

범위는 변수, 상수, 프로시저를 다른 프로시저에서 사용할 수 있다는 것을 말합니다. 프로시저 수준, private 모듈 수준, public 모듈 수준 등 세 범위로 나뉩니다.

변수를 선언할 때 범위를 결정하십시오. 범위가 다른 변수들 사이에서 이름 충돌 오류를 방지하기 위해 변수는 명시적으로 선언하는 것이 좋습니다.

프로시저 수준 범위 정의

프로시저 안에서 선언된 변수나 상수는 그 프로시저 밖에서는 보이지 않습니다. 변수가 선언된 프로시저에서만 그 변수를 사용할 수 있습니다. 다음 보기에서 첫 번째 프로시저는 문자열이 들어 있는 메시지 상자를 표시합니다. 변수 strMsg는 첫 번째 프로시저에 한정되었기 때문에 두 번째 프로시저는 공백 메시지 상자를 표시합니다.

Sub LocalVariable()    Dim strMsg As String    strMsg = " 변수는  프로시저 외부에서는 사용할  없습니다."    MsgBox strMsgEnd SubSub OutsideScope()    MsgBox strMsgEnd Sub

Private 모듈 수준 범위 선언

모듈의 선언부에 모듈 수준 변수와 상수를 정의할 수 있습니다. 모듈 수준 변수는 public 또는 private이 될 수 있습니다. public 변수는 프로젝트에 있는 모든 모듈의 모든 프로시저에서 사용할 수 있습니다. private 변수는 그 모듈의 프로시저에서만 사용할 수 있습니다. 기본적으로 선언부에 Dim 문으로 선언된 변수는 private 범위를 갖습니다. 그러나 Private 키워드를 변수 앞에 놓으면 코드의 범위가 명확해 집니다.

다음 보기에서 문자열 변수 strMsg는 모듈에 정의된 어느 프로시저에서나 사용할 수 있습니다. 두 번째 프로시저가 호출되면 대화 상자에 문자열 변수 strMsg의 내용이 표시됩니다.

' 모듈의 선언부에 다음 코드를 추가합니다.Private strMsg sAs StringSub InitializePrivateVariable()    strMsg = " 변수는  모듈 외부에서는 사용할  없습니다. "End SubSub UsePrivateVariable()    MsgBox strMsgEnd Sub

메모    표준 모듈 또는 클래스 모듈에 선언된 Public 프로시저는 참조하는 프로젝트 어디에서나 사용할 수 있습니다. 모듈의 모든 프로시저 범위를 현재 프로젝트로 제한하려면 모듈의 선언부에 Option Private Module 문을 추가하십시오. Public 변수와 프로시저는 현재 프로젝트에 있는 다른 프로시저에서는 사용할 수 있으나 참조하는 프로젝트에서는 사용할 수 없습니다.

Public 모듈 수준 범위 정의

모듈 수준 변수를 public으로 선언하면 프로젝트의 모든 프로시저에서 사용할 수 있습니다. 다음 보기에서 문자열 변수 strMsg는 프로젝트의 모든 모듈에 있는 어느 프로시저에서나 사용할 수 있습니다.

' 모듈의 선언부에 포함합니다.Public strMsg As String

이벤트 프로시저를 제외한 모든 프로시저는 public이 기본입니다. Visual Basic이 이벤트 프로시저를 만들 때 Private 키워드가 프로시저 선언 앞에 자동으로 삽입됩니다. 다른 모든 프로시저에서 프로시저를 public으로 설정하지 않으려면 프로시저를 Private 키워드로 선언해야 합니다.

참조하는 프로젝트의 표준 모듈이나 클래스 모듈에 정의된 Public 프로시저, 변수, 상수를 사용할 수 있습니다. 그러나 먼저 정의된 프로젝트에 대한 참조를 설정해야 합니다.

폼 모듈이나 보고서 모듈 같이 표준 모듈이나 클래스 모듈이 아닌 곳에서 정의된 Public 프로시저, 변수, 상수는 참조하는 프로젝트에서 사용할 수 없습니다. 이 모듈이 있는 프로젝트에서는 private이기 때문입니다.

 

 

 

변수 선언

   

변수를 선언할 때는 대개 Dim 문을 사용합니다. 선언문은 프로시저 수준 변수를 만들기 위해 프로시저에 넣을 수 있습니다. 선언부에서 모듈의 맨 위에 넣어 모듈 수준 변수를 만들 수도 있습니다.

다음은 변수 strName를 만들고 String 데이터 형식을 지정합니다.

Dim strName As String

이 선언문이 프로시저 안에 나타나면 변수 strName은 그 프로시저에서만 사용될 수 있습니다. 선언문이 모듈의 선언부에 나타나면 변수 strName은 모듈의 모든 프로시저에서 사용할 수는 있지만 프로젝트의 다른 모듈에 있는 프로시저에서는 사용할 수 없습니다. 이 변수를 프로젝트의 모든 프로시저에서 사용할 수 있게 하려면 다음과 같이 Public 문을 앞에 놓으면 됩니다.

Public strName As String

변수 이름에 대한 자세한 내용은 Visual Basic 도움말에 있는 “Visual Basic 명명 규칙”을 참고하십시오.

변수는 Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String(가변 길이 문자열), String * length(고정 길이 문자열), Object 또는 Variant 형식으로 선언됩니다. 데이터 형식을 지정하지 않으면 Variant 데이터 형식이 기본값으로 정의됩니다. 또한 Type 문을 사용하여 사용자 정의 형식을 만들 수 있습니다. 데이터 형식에 대한 자세한 내용은 Visual Basic 도움말에 있는 “데이터 형식 요약”을 참고하십시오.

한 개의 문에 변수를 여러 개 선언할 수 있습니다. 데이터 형식을 지정하려면 각 변수에 대하여 데이터 형식을 포함시켜야 합니다. 다음의 문에서는 intX, intY, intZ 변수를 Integer 형식으로 선언됩니다.

Dim intX As Integer, intY As Integer, intZ As Integer

다음 에서는 intXintY 변수는 Variant 형식으로 선언되고 intZ만이 Integer 형식으로 선언됩니다.

Dim intX, intY, intZ As Integer

선언문에 항상 변수의 데이터 형식을 정할 필요는 없습니다. 데이터 형식을 생략하면 변수는 Variant 형식으로 지정됩니다.

Public 문 사용

Public 문을 사용하여 Public 모듈 수준 변수를 선언합니다.

Public strName As String

Public 변수는 프로젝트의 모든 프로시저에서 사용할 수 있습니다. Public 변수가 표준 모듈이나 클래스 모듈에 선언되었다면 Public 변수가 선언된 프로젝트를 참조하는 모든 프로젝트에서 사용할 수 있습니다.

Private 문 사용

Private 문을 사용하여 Private 모듈 수준 변수를 선언합니다.

Private MyName As String

Private 변수는 같은 모듈에 있는 프로시저만 사용할 수 있습니다.

메모   모듈 수준에서 사용될 경우 Dim 문은 Private 문과 같습니다. Private 문을 사용하여 코드를 쉽게 읽고 이해할 수 있습니다.

Static 문 사용

Dim 문 대신에 Static 문을 사용할 경우 선언된 변수는 호출 사이에 값을 유지합니다.

VBA 프로시져 형식과 범위 질문

... 프로시져 형식에는 sub, function, property 프로시져 범위에는 public, private, dim... VBA를 시작하시고자 한다면 반드시 도움말을 찾아가며 익혀가시는 것에 익숙해...

엑셀 vba 질문좀드립니다.

엑셀 vba 질문좀드립니다. 일정조건에 해당하는... K열기준 앞 6개문자가 날짜형식6자리... 그 이외의 모든 행은 a~k열 범위의 행을 삭제하면...

저장프로시져와 asp 질문이요

... asp" %> 자료를 입력하는 저장프로시져입니다. 쿼리문에서... ADODB.Command error '800a0bb9' 잘못된 형식이거나 올바른 범위 밖에...

엑셀 vba 질문

vba 고수 분의 조언을 구합니다! 수식이... 날짜의 범위에 있는지 확인한다 [EX) 현재 날짜... 이런 형식인데 수식 만들어주시면 응용까지는...

엑셀vba기초질문입니다.

엑셀vba기초질문입니다. 다른시트에 있는 값을... (기존답변주신분들 감사합니다.) 좀 형식이... (5열)범위에 넣음 R.Offset(, 15).Resize(1, c).Value = F.Offset...

엑셀 VBA 질문이요~

VBA의 활용범위를 알려주세요. 이런 용도로 쓰인다고... DB형식으로 자료를 저장한 뒤에 필터 기능을 사용하면... 이 두 녀석들이 강력한 자동화 기능인데 만약에 질문자분께...