VBA에서는 일반적으로 byVal 또는 byRef를 통해 참조를 작성하는 것과 달리 공용 변수를 공용으로 정의합니다. 가장 일반적으로, 저는 서브 루틴이나 함수를 호출하여 변수에 대한 값을 설정합니다. 누군가가 내게 나에게 byVal/byRef를 사용하는 이점을 설명할까요?vbval vs public 변수
2
A
답변
3
이것은 아키텍처를 정의하는 방법과 관련이 있습니다. 음, VBA는 OOP 언어가 아니며 이유가이 질문이 마음에 들었습니다.
공개 변수은 (선언 된 모듈의 인스턴스가 메모리에있을 때까지) 값을 유지합니다. 예를 들어, 공용 변수는 일반입니다 모듈은 ThisWorkbook이 열려있을 때까지 유지됩니다 (런타임 오류가있는 경우 제외). 다른 한편, UserForm 모듈의 공용 변수는 UserForm 인스턴스가 열려있을 때까지 유지됩니다. 클래스 모듈의 공용 변수는 "속성"이며 메모리의 클래스 인스턴스 변수까지 유지됩니다. 모든 것이 클래스 기반 인 다른 OOP 언어에서는 public 변수가 없습니다 ... "속성"이라고 말했고 클래스 인스턴스가로드 될 때까지 유지됩니다.
ByVal (byValue) 또는 ByRef (byReference)은 변수를 매개 변수로 전달하는 것입니다 (함수에서 필요한 것에 따라 다름).
어느 것이 더 낫습니다 : 내 이전 경험에서 VBA의 공용 변수는 실제로 구현하기가 쉽지만 쉽지 않습니다. 너무 많은 공개 변수 = 디버깅하는 데 너무 많은 시간이 필요합니다. 2 ~ 3 개의 공용 변수 만 사용하고 속성을 보유 할 클래스에서 코드를 디자인하십시오. 이 방법으로 다른 언어로 이동하면 집에있을 수 있습니다.
코드가 더 깨끗해 지므로 문제가 발생할 때 쉽게 디버깅 할 수 있습니다. 전역 변수를 사용할 때 코드가 특정 전역 값을 변경할 수있는 모든 지점을 추적하는 것이 때때로 어렵습니다. 즉, 전체 전역에서 변경되지 않은 값을 항상 신뢰할 수있는 것은 아닙니다. –