문제

일반적인 질문을 좋아하지 않는 사회자를 피하기 위해 이것은 Visio VBA 하나이지만 제목에 조금 틈새 시장이고, 대답이 일반적인 것일 수있는 것 같아요 :-)

내 코드에는 다음 변수가 있습니다.

Public gappVisio As Visio.Application
Public gdocFile As Visio.Document
Public gpagDiagram As Visio.Page
.

Visio와의 unfamilar의 경우 응용 프로그램 개체를 만들고 문서를 열고 실제로 일부 도면을 수행 할 수있는 문서의 페이지에 대한 참조를 설정합니다.

모든 VAR은 전역이지만 실제로 GDOCFILE은 내 초기화 루틴에서만 사용됩니다. 그래서 제 질문은 GDocfile이 글로벌만큼 필요합니까, 아니면 그냥 지역을 만들 수 있습니까? 나는 그것이 범위를 벗어 났을 때 로컬이었을 때 문서 개체를 정리 할 때 로컬이 될 것이라고 걱정했다고 가정합니다. 그러나 나는 문서의 페이지가 여전히 필요합니까?

의미가 있습니까?

도움이 되었습니까?

해결책

당신이 절대적으로해야하지 않는 한 변수 또는 물체를 글로벌하지 마십시오.객체 참조를 수행하는 절차에 대한 매개 변수로 전달합니다.객체에서 필요한 것은 "범위가 끊어졌습니다"라고 말하면서 호출 절차에 함수 리턴 값 (또는 더욱 어둡게 사용되지 않으므로 부속하여 부대 파라미터 값이 덜)이어야합니다.

객체가 범위를 벗어나면 실제로 범위가없는 해당 객체로 실제로 참조 입니다.오브젝트는 여전히 메모리에 변경되지 않았습니다.

일반적으로 글로벌은 나쁘고 유지 관리가 어려워 지지만 예외는 보편적 인 상수와 같은 것들을 할 수 있습니다.

Public Const PI As Double = 3.14159265358979
.

글로벌로서 그것을 갖는 것이 좋습니다.

다른 팁

귀하의 경우에, 문서 수명은 Visio 응용 프로그램에 의해 제어되며, 작성한 변수, 또는 그들이하는 범위 (글로벌 또는 로컬)에 관계없이 문서가 정리되지 않습니다.모든 참조 카운팅 (범위 지정) 규칙은 단순히 문서의 Visio가 더 이상 참조가 더 이상 참조되지 않더라도 DOC가 파괴되지 않습니다.

Visio가 문서를 닫으려면 문서를 닫을 수 있습니다.그 후에 문서의 (또는 페이지의) 메소드 또는이 문서 의이 문서 / 페이지를 참조하는 문서 (또는 페이지의) 메소드 또는 속성을 사용하려는 시도는 예외가 발생합니다.

DOC는 사용자가 닫을 수 있습니다.이 경우 모든 변수를 참조하는 모든 변수 (또는 페이지 또는 모양의 내부의 오브젝트)가 유효하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top