我有一個奇怪的問題,試圖填充我的對象集合。當我爲PromptsRange.Rows
做每個循環時,一切都很完美。您可以逐步瀏覽NewPrompt
區域,並觀看每一行通過,最終將最終添加到PromptsCollection
。我有這個問題。如果您嘗試爲PromptsCollection
上的每個循環執行一次,則每個對象(36)都完全相同,並且是可查找的最後一個值。我難倒了。也許其中一位學者可以幫助我。Excel VBA集合保持重複最後一個對象
下面的代碼是一個窗體模塊內。 顯式的選項
Private pPromptsCollection As New Collection
Private pProductPromptMapping As New clsOrderPromptRow
Private pOrderPrompts As New clsOrderPromptRow
Private pTarget As Range
Private pSKU As String
Public Property Get PromptsCollection() As Collection
Set PromptsCollection = pPromptsCollection
End Property
Public Property Let PromptsCollection(Value As Collection)
Set pPromptsCollection = Value
End Property
Private Sub SetPromptControls()
Dim PromptsRange As Range
Dim PromptRow As Range
Set PromptsRange = Range("LookUpTablePrompts")
For Each PromptRow In PromptsRange.Rows
Dim NewPrompt As New clsPrompt
NewPrompt.Name = PromptRow.Cells(1, 1)
NewPrompt.ControlType = PromptRow.Cells(1, 2)
NewPrompt.ComboboxValues = PromptRow.Cells(1, 3)
NewPrompt.HelpText = PromptRow.Cells(1, 4)
NewPrompt.TabIndex = PromptRow.Cells(1, 5)
NewPrompt.ColumnIndex = PromptRow.Cells(1, 6)
NewPrompt.TableIndex = PromptRow.Cells(1, 7)
NewPrompt.ControlName = PromptRow.Cells(1, 8)
PromptsCollection.Add NewPrompt, CStr(NewPrompt.Name)
Next
PromptsCollection.Count
End Sub
所以,現在這裏是我得到的問題。這將導致36個對象完全相同。
Dim Prompt As New clsPrompt
For Each Prompt In PromptsCollection
MsgBox (Prompt.Name)
Next
我甚至把它推到觀察窗口,以驗證所有的對象是在面對相同的。它始終與表底部抽屜前部高度的最後一行結果。
希望這已經夠清楚了。提前致謝。
「作爲新」不是真正的問題。真正的問題是循環的每次迭代都寫入相同的對象實例。每個迭代都需要創建一個新的對象實例,就像您的示例代碼正確執行的那樣。您仍然可以將變量聲明爲「新建」,並在每次循環迭代開始時創建一個新實例。但最好做一個或另一個,所以在這種情況下,您的示例代碼將是我的首選解決方案。 –
@JoeBourne說得好。 –