2014-06-20 1 views
0

Java 및 자바 개발자로서 개체 및 클래스로 작업 할 때 (class라는 용어를 vba에서 사용합니까?) 에 문제가 있습니다. 내가 객체 ByVal 또는 ByRef을 전달할 수 있으며, 수동으로 배열을 ReDim으로 확장해야한다는 것을 알고 있습니다.개체를 사용하여 하위 호출

내 문제 : 고객 목록을 만들려고합니다. 고객은 주소와 이름을 가지고 있습니다. 이름은 간단한 String이고 다른 클래스를 다룹니다. (extractAddress 반환 주소 객체) 나는 Cells의 목록을 반복하고 내 배열을 rediming 후 나는 다음과 같은 snipplet과 신규 고객을 추가

ReDim Preserve customers(i) 
Set customers(i) = New Customer 
Call customers(i).create(Sheets("Customers").Cells(pos, 1), extractAddress(Val(pos))) 
' ^^^ error's here ^^^ 

내 고객 클래스의 create 방법은

Public Sub create(name As String, ByRef address As address) 
    CustomerName = name 
    CustomerAddress = address 
End Sub 
처럼 보인다

이 코드를 실행하면 런타임 오류 91 : 개체 변수 또는 With 블록이 설정되지 않았습니다. 강조 표시된 줄의 오류입니다. extractAddress이 개체를 성공적으로 반환하고 있습니다 (Nothing이 아님). 어떤 개체 변수가 적절하게 설정되어 있는지 알 수 없습니다.

나는 create 메서드를 매개 변수로만 이름이나 주소 만 사용하려고했지만 두 가지 방법 모두 내 문제를 해결하지 못했습니다. 내가 잘못된 라인을 주석 처리하면 스크립트 (분명히)가 잘 작동합니다. 그래서 나는 내 무언가가 내 Call과 틀렸다고 생각합니다.

사이드 질문 : 다른 모든 사용자 정의 클래스가 소문자로 표시되면 왜 vba 코드 편집기가 낙타 케이싱입니까?


부록 : extractAddress 기능 객체에 변수를 설정할 때 Set를 사용할 필요가

Private Function extractAddress(row As Integer) As address 

    Dim address As New address 
    Call address.create(Sheets("Customers").Cells(row, 2), Sheets("Customers").Cells(row, 3), Sheets("Customers").Cells(row, 4), Sheets("Customers").Cells(row, 5)) 

    Set extractAddress = address 

End Function 
+0

그래서,에 Customer.create 방법

CustomerAddress = address 

이 줄을 변경? – aphoria

+0

요청한 방법을 추가했습니다 – cr0

+0

1) VBA는 대소 문자를 구분하지 않습니다. 2) 객체를 전달하는 것은 ByRef, AFAIK뿐입니다. 3) 나는 죄송 합니다만 자제 할 수는 없지만, "자바 녀석"이 만든 VBA 앱으로 작업해야하는 모든 경우는 불필요한 복잡성의 악몽이었습니다. -/행운을 빈다. –

답변

4

. 당신이 우리에게`extractAddress` 방법에 대한 코드를 표시 할 수 있습니다

Set CustomerAddress = address 
+0

고마워요, 효과가 있었고 너무 분명했습니다. 왜 내가 스스로 해결할 수 없었는지 모르겠다. – cr0

+0

잘 했어.나는 그 하나도 정말로 놓쳤다. –

+0

쉽게 놓칠 수 있습니다. 나는 처음에 그것을 놓쳤다. 그래서 'extractAddress' 메소드의 코드를 보도록 요청한 이유입니다. 내가 생각한대로 반환하지 않는다고 생각했습니다. – aphoria

관련 문제