Java 및 자바 개발자로서 개체 및 클래스로 작업 할 때 (class
라는 용어를 vba에서 사용합니까?) excel-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
그래서,에
Customer.create
방법이 줄을 변경? – aphoria
요청한 방법을 추가했습니다 – cr0
1) VBA는 대소 문자를 구분하지 않습니다. 2) 객체를 전달하는 것은 ByRef, AFAIK뿐입니다. 3) 나는 죄송 합니다만 자제 할 수는 없지만, "자바 녀석"이 만든 VBA 앱으로 작업해야하는 모든 경우는 불필요한 복잡성의 악몽이었습니다. -/행운을 빈다. –