2012-06-28 5 views
1

하는 ByRef 인수 :VBA 내가 클래스 1, 라는 클래스를 생성하고 다른 모듈에, 나는이 같은 클래스를 사용할 불일치

Dim budgeunit As Class1 

Sub Creattree() 
    Dim lvl1p, lvl1m, lvl1dm As Class1 

    Set lvl1p = New Class1 
    lvl1p.setName ("pear") 
    Set lvl1m = New Class1 
    lvl1m.setName ("Mango") 

    Set budgeunit = New Class1 

    budgeunit.addtochildren (lvl1p), budgeunit.addtochildren(lvl1m) 
End Sub 

을하지만 그것을 컴파일 할 때, 그것은합니다 (budgeunit.addtochildren을 강조 lvl1m) 그리고 Byref 인수 불일치. 나는 모든 논쟁을 선언했다, 나는 왜 이것이 일어나는 지 모른다. 클래스 코드 :

Dim Children() As Class1 
Dim Parent() As Class1 
Public level As Integer 
Public name As String 
Function setName(nm As String) 
    name = nm 
End Function 

Function addtochildren(node As Class1) 
    num = Children.Count 
    ReDim Children(num + 1) As String 
    Children(num) = node 
    node.addParent (Me) 
End Function 
+0

변수 선언은 'lvl1dm'을 Class1로만 선언합니다. 다른 변수는 변형입니다. 명령문 분리 기호로 쉼표를 사용할 수 없습니다. 클래스 메소드는 아무런 값도 반환하지 않으므로 subs이어야합니다. 그런 다음 addtochildren 호출에서 괄호를 제거하십시오. Class1 코드에서 "addParent"의 정의는 어디에 있습니까? –

+0

아, 말해줘서 고마워, 나는 여전히 VBA 모드에 빠지지 않았다 ... JAVA에서 추천 한 것처럼 표창이 작동하지 않는 것을 잊어 버렸다. –

답변

1

스테판의 대답은 정확하지만 다른 문제가 있습니다.

무엇을 의미합니까?

budgeunit.addtochildren (lvl1p), budgeunit.addtochildren(lvl1m) 

두 개의 명령문을 쉼표로 구분할 수 없습니다. 이거 아세요?

budgeunit.addtochildren lvl1p 
budgeunit.addtochildren lvl1m 

또한 함수 사용을 수정하고 아마도 하위로 바꿔야합니다. 당신은 그들로부터 어떤 결과물도 기대하지 않는다. 그래서 ...

또 다른 것은 괄호를 사용하는 것이다. subs에 대한 인수 (및 반환 값이없는 함수)는 괄호로 묶지 않아야합니다. 일부 경우 괄호를 사용하면 상황이 잘못 될 수 있습니다. (Call 표기법을 사용하면 일부 자격이 부여됩니다.

1

변수 선언이 예상 한 것과 다를 수 있습니다. 보십시오 : 귀하의 선언에

Sub Creattree() 
    Dim lvl1p as Class1, lvl1m as Class1, lvl1dm As Class1 

, 당신은 Variant 형식의 두 변수를 만들고, 형 클래스 1의.