2013-07-05 45 views
6

Tôi đang cố gắng tạo một lớp để giữ một số lượng các mục khác nhau (mà chính chúng là một đối tượng lớp khác).VBA Class() đối tượng là tài sản của lớp khác

Vì vậy, tôi có Class 2:

 
' Class 2 contain each individual quote elements (OTC and MRC) 

Private pOTC As String 
Private pMRC As String 
Public Property Get OTC() As String 
    OTC = pOTC 
End Property 
Public Property Let OTC(Value As String) 
    pOTC = Value 
End Property 

Public Property Get MRC() As String 
    MRC = pMRC 
End Property 
Public Property Let MRC(Value As String) 
    pMRC = Value 
End Property 

Sau đó, lớp 1 chứa một mảng của lớp 2:

 
Private pCurr As String 
Private pQuote(20) As Class2 

Public Property Get Curr() As String 
    Curr = pCurr 
End Property 
Public Property Let Curr(Value As String) 
    pCurr = Value 
End Property 

Public Property Set Quote(Index As Integer, cQuote As Class2) 
    Set pQuote(Index) = cQuote 
End Property 

Public Property Get Quote(Index As Integer) As Class2 
    Quote = pQuote(Index) 
End Property 

Và những gì tôi muốn làm là một cái gì đó như:

 
Dim myQuotes As Class1 
Set myQuotes = New Class1 

myQuotes.Curr = "GBP" 
myQuotes.Quote(3).OTC = "1200" 

Dòng đầu tiên thiết lập myQuotes.Curr là không có vấn đề, tuy nhiên khi tôi cố gắng thiết lập một giá trị bên trong mảng các lỗi dòng tiếp theo wit h Run-time 91 Object biến hoặc biến Với khối không đặt

Bất kỳ con trỏ như những gì tôi đang làm sai và làm thế nào tôi có thể thiết lập các giá trị cho các phần tử trong mảng lớp học?

Cảm ơn trước!

+0

bên cạnh những giải pháp cho vấn đề của bạn mà là bên dưới nhờ Alex K., tôi có thể hỏi (tò mò) tại sao bạn làm theo cách bạn thay vì sử dụng một bộ sưu tập các trích dẫn? –

Trả lời

4

Khi bạn myQuotes.Quote(3) bạn gọi Property Get Quote có sự cố.

mảng nội bộ của bạn của Class2 không được khởi tạo nên pQuote(Index) đề cập đến một phần tử mảng của Nothing, khi bạn rồi myQuotes.Quote(3).OTC = bạn cố gắng để gán cho Nothing mà thất bại.

Bạn cần đảm bảo rằng pQuote(Index) được sao chép; bạn có thể làm điều này theo yêu cầu:

Public Property Get Quote(Index As Integer) As Class2 
    If (pQuote(Index) Is Nothing) Then Set pQuote(Index) = New Class2 
    Set Quote = pQuote(Index) 
End Property 

(Lưu ý cần Set)

Hoặc bằng cách thêm một thói quen intitialisation để Class1:

Private Sub Class_Initialize() 
    Dim Index As Long 
    For Index = 0 To UBound(pQuote) 
     Set pQuote(Index) = New Class2 
    Next 
End Sub 
+0

Cảm ơn! Điều đó đã làm việc !! Tôi cũng tìm thấy một sai lầm khác trong Class1, vì nó nên đọc ** Đặt Trích dẫn = pQuote (Chỉ mục) **: 'Thuộc tính Công khai Nhận Trích dẫn (Chỉ mục là Số nguyên) Như Class2 Đặt Quote = pQuote (Chỉ mục) Kết thúc Thuộc tính' – freudian

0

Có lẽ nó nên

Public Property Let Quote(Index As Integer, cQuote As Class2) 
    Set pQuote(Index) = cQuote 
End Property 
1

Bạn cần phải cài đặt chúng như New Class2 trong Class1:

For intI = LBOUND(pQuote) to UBOUND(pQuote) 
    Set pQuote(intI) = New Class2 
Next IntI 

Cũng giống như bạn làm với Class1 trong kịch bản cuối cùng của bạn.

Các vấn đề liên quan