我已經用幾種語言進行了編程,但我正在第一次測驗 VBA。
我需要創建一個具有作為屬性的類,另一個類的物件陣列。讓我們舉一個 Person 類的例子,它保存有關姓名、姓氏和地址的資訊。還有一個地址類,它保存有關街道和郵政編碼的資訊。一個人可以有很多地址,所以 Person 應該有一個地址陣列。
class Address
Private pStreet as String
Private pZip as Int
Public Property Let Street(val As String)
pStreet = val
End Property
Public Property Get Street() As String
Street = pStreet
End Property
Public Property Let Zip(val As String)
pZip = val
End Property
Public Property Get Zip() As String
Zip = pZip
End Property
class Person
Private pName as String
Private pSurname as String
Private pAddresses() as Address
Public Property Let Name(val As String)
pName = val
End Property
Public Property Get Name() As String
Name = pName
End Property
Public Property Let Surname(val As String)
pSurname = val
End Property
Public Property Get Surname() As String
Surame = pSurname
End Property
我應該如何管理地址陣列?
我嘗試使用此類代碼,但如果我嘗試在人員物件上呼叫此方法,則會收到錯誤“物件不支持此屬性或方法”
Public Sub addAddress(val as Address)
ReDim pAddresses(1)
pAddresses(0) = val
End Sub
這樣做的方法是什么?我找不到任何教程或展示如何在物件內部使用物件陣列的東西
uj5u.com熱心網友回復:
當您使用 redim 時,它實際上會創建一個指定大小的全新陣列,因此所有現有資料都會丟失。要將舊陣列中的值復制到新陣列中,您需要如下所示的“保留”關鍵字
ReDim Preserve pAddresses(1)
但這確實效率低下,因為向陣列中添加另一個元素需要重寫整個陣列。你可能最好使用一個集合。所以不要像這樣宣告 pAddress
Private pAddresses() as Address ' delcare as an array
像這樣做
Private pAddresses as New Collection ' declare as a collection
現在您添加地址的方法如下所示:
Public Sub addAddress(val as Address)
pAddresses.Add val
End Sub
集合的索引從 1 而不是 0 開始計數(就像陣列一樣),因此以下行列印集合中的第一個條目
Debug.Print pAddresses(1)
uj5u.com熱心網友回復:
將您的代碼更改為此應該可以作業
Public Sub main()
Dim val As New Address
val.Street = "MyStreet"
val.Zip = 666
Dim val2 As New Address
val2.Street = "my New Street"
val2.Zip = 999
Dim myself As New Person
With myself
.Name = "its Me"
.Surname = "Smith"
Call .addAddress(val)
Call .addAddress(val2)
End With
End Sub
class Address
Private pStreet As String
Private pZip As Integer
Public Property Let Street(val As String)
pStreet = val
End Property
Public Property Get Street() As String
Street = pStreet
End Property
Public Property Let Zip(val As String)
pZip = val
End Property
Public Property Get Zip() As String
Zip = pZip
End Property
end class
class person
Private pName As String
Private pSurname As String
Private pAddresses As Collection
Private Sub Class_Initialize()
Set pAddresses = New Collection
End Sub
Public Property Let Name(val As String)
pName = val
End Property
Public Property Get Name() As String
Name = pName
End Property
Public Property Let Surname(val As String)
pSurname = val
End Property
Public Property Get Surname() As String
Surame = pSurname
End Property
Public Sub addAddress(val As Address)
Call pAddresses.Add(val)
End Sub
end class
首先,使用NEW關鍵字創建物件,然后SET將物件創建為變數。SET如果要將對現有物件的參考存盤在變數中,則始終必須使用關鍵字。
但更好的方法是使用 acollection而不是陣列。
不錯的起點 Excel 收藏終極指南
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/453637.html
