2016-06-06 2 views
3

장애물로 인해 여러 개의 하위 클래스가 클래스 변수를 인식하려고합니다. 전역으로 선언하려고하면 "잘못된 외부 프로 시저"라는 컴파일 오류가 발생합니다. 그런 다음 공용 함수 나 하위 변수를 실행하여 변수를 선언하면 나머지 하위 변수는 정의되지 않은 상태로 유지됩니다. 그들의 값이 UserForm을 통해 변경되고 다른 하위에서 활용되기로되어 있기 때문에 여러 개의 하위가 변수를 인식하기를 원합니다.VBA 전역 클래스 변수

이러한 방식으로 작동 할 수 있다면 좋지만 내 디자인에 근본적인 결함이있을 수 있음을 이해합니다. 제발 조언 해!

이것은 "cRSM"라는 이름의 클래스 모듈로 삽입 내 클래스 정의입니다 :

'Bedoya 
Dim Bedoya As cRSM 
Set Bedoya = New cRSM 
Bedoya.Name = "Bedoya" 

:

Option Explicit 

Private pName As String 
Private pDesiredGrowth As Double 

'Name of RSM 
Public Property Get Name() As String 
Name = pName 
End Property 

Public Property Let Name(Value As String) 
pName = Value 
End Property 


'Growth property 
Public Property Get DesiredGrowth() As Double 
DesiredGrowth = pDesiredGrowth 
End Property 

Public Property Let DesiredGrowth(Value As Double) 
If Value > 0 And Value < 1 Then 
    pDesiredGrowth = Value 
End If 
End Property 

이 (필자는 글로벌 선언 구역에 넣어) 잘못된 프로 시저 오류입니다 그리고 이것은 "변수가 정의되지 않은 오류"(개인 하위 내에서)입니다 :

고맙습니다. f 또는

표준 모듈 (나는 광산 MGlobals 이름)에서
+0

을위한 'Set Bedoya = New cRSM : Bedoya.Name = "Bedoya"'클래스 초기화 메소드에서 이것을하십시오 -이 코드는 메소드 외부에 가질 수 없습니다. –

+0

@Tim Williams, 어떻게 "방법"이라고 부릅니까?작은 코드 예제 plz, 여기서 분실했습니다 –

+0

메서드는 Sub 또는 Function –

답변

1

가, 다른 표준 모듈 (I 내 MOpenClose 이름)에 다음

Public Bedoya As cRSM 

을 넣어

Sub Initialize() 
    If Not Bedoya Is Nothing Then 
     Set Bedoya = New cRSM 
    End If 
End Sub 

모든 기본 속성을 넣어 시간 당신 set은 Class_Initialize 프로 시저에서 설정해야합니다. 당신이 Bedoya를 사용하려면 어떤 절차에서는

Initialize 

를 사용하고 필요한 경우 전역 변수를 인스턴스화합니다. 이 키워드와 New 키워드의 유일한 차이점은 실수로이 메소드로 변수를 인스턴스화 할 수 없다는 것입니다. Initialize으로 전화 하시거나 전화하지 않으 셨습니다. 많은 VBA 개발자가 New을 사용하지만 거의 이유가 없습니다.

+0

이고 이것이 의미하는 점은 "실수로 변수를 인스턴스화합니다"입니까? –

+0

당신이 의도하지 않은 곳에 '베두 야'를 사용한다는 뜻입니다. –

0

잘 이해했다면 전역 개체가 필요합니다.

그런 다음

public Bedoya As cRSM 

당신은 지금 당신이 사용할 수있는

Private Sub Workbook_Open() 
    Set Bedoya = New cRSM 
    Bedoya.initialize("Bedoya") 'a method to initialize private variables 
End Sub 

같은 통합 문서 내에서 글로벌 이벤트를 사용할 수 있습니다 ... 개체를 만드는이 같은 모듈의 선언을 넣을 수 있습니다

전역 개체. Excel 파일을 다시 시작하거나이 방법을 수동으로 실행해야합니다.

전역 변수를 사용하는 좋은 스타일이 아니라 때로는 할 더 쉽다 : P

당신이 현재 수행하는 단일 소프트웨어 패턴을 사용하여 수행 할 무엇, 그러나 이것은 다른 일 히히히