2009-11-09 8 views
1

내 액세스 프로젝트에 양식 모듈이 있습니다. 모듈의 상단에, 나는 변수과 같이 선언액세스 양식 모듈의 변수에 대한 공개 및 개인 한정자

option explicit 

private id_foo as long 

내가 명시 적으로 내가 그것에 private 액세스 한정자를 사용하여 내 폼 모듈에서 변수가 필요하다고 언급하고 싶다.

function bar() as long 
    call do_something(me.id_foo) 
end function 

아직,이 작동하지 않습니다

지금, 더 아래 같은 폼 모듈에서, 나는 알고 및/또는 id_foo의 값을 수정해야하는 기능이있다. 그러나 공개 수정자를 공개 변조 자로 변경하면

public id_foo as long 

과 같이 작동합니다.

이 동작은 이상한 또는 비 직관적 인 것으로 나에게 충격을 주며 동일한 양식 모듈에서 변수를 공용으로 사용하기 위해 변수를 공용으로 선언해야하는 경우 공개 및 비공개의 의미를 볼 수 없습니다.

그래서 나는 명백한 것을 간과하고 있습니까? 아니면 이것이 어떻게되어야할까요? , 당신이 나를 키워드를 사용하는 경우

function bar() as long 
    call do_something(id_foo) 
end function 
+0

어떤 방식으로 작동하지 않습니까? 오류 메시지? 나는 거기에서 나와 함께 할 수 있다는 것을 알 수 없기 때문에 컴파일 하는가? – Fionnuala

답변

0

모듈과 함께 양식이 실제로 클래스 객체를 나타냅니다. 또한 해당 클래스 객체의 여러 인스턴스를 생성 (인스턴스화) 할 수 있습니다.

그래서 public으로 선언 한 변수는 해당 클래스 객체의 public 속성이됩니다. public으로 선언 된 양식 코드 모듈의 모든 함수는 해당 클래스 개체의 public 메서드가됩니다. 그런 다음 이러한 모든 속성 및 메서드는 "나"를 입력 할 때 인텔의 의미로 표시됩니다. 예어.

변수를 private로 선언하면 해당 변수 (또는 함수)가 공용 속성 (변수) 또는 양식의 공용 메서드 (함수)로 표시되지 않습니다.

그래서 간단한 해결책은 코드에서 me 키워드의 사용을 중단하는 것이며, 코드는 잘 실행됩니다.

공개 또는 비공개로 선언하면 여기에 영향을 미칩니다. 실제로 "개인"이 기본값입니다.

따라서 public은 변수 및/또는 함수를 클래스 개체 인 해당 폼의 속성 및 메서드로 노출합니다 (동일한 폼의 인스턴스를 동시에로드 할 수 있음).

사물을 기본값으로 디 컬링하면 변수 또는 함수에 대해 아무 것도하지 않아도되므로 해당 코드 모듈의 ANY 코드 루틴에서 값을 계속 사용할 수 있지만 재산/방법으로 공개 될 수 있으며 따라서 나를 사용할 수 없습니다.

따라서 나를 제거하면 코드가 정상적으로 작동합니다.그냥 가서 :

function bar() as long 
    call do_something(id_foo) 
end function 
+0

설명해 주셔서 감사합니다. 따라서 '나'는 다른 언어에서 볼 수있는 '자기'나 '이'와 정확히 동일하지 않습니다. –

2

id_foo 앞에있는 "나"없이 시도).

1

, 당신은 공용 멤버 만 볼 수있는 속성 (또한 양식 및 VBA :

감사합니다/르네

+0

좋은 답변입니다. 항상 완벽한 것은 아니지만 intellisense는 공개되지 않는 한 Me.id_foo를 표시하지 않습니다. – JeffO

+0

이것은 클래스 모듈의 표준 동작입니다. 하나는 독립 실행 형 클래스 모듈을 사용하기 전까지 실현하지 못할 가능성이 있지만 ME는 첨부 된 폼/보고서가 아닌 CLASS 모듈을 참조합니다. –

관련 문제