Excel VBA集合保持重复最后一个对象

joe*_*oeb 1 excel vba excel-vba

我试图填充我的对象集合时遇到一个奇怪的问题.当我为每个循环做PromptsRange.Rows一切都是完美的.您可以单步浏览该NewPrompt区域并观察每一行是否通过,并最终添加到PromptsCollection最后.我遇到的问题是在这一点之后.如果您尝试为每个循环执行a PromptsCollection,则每个对象(36)都完全相同,并且是查找表中的最后一个值.我很难过.也许其中一位学者可以帮助我.

这是我的查阅表 在此输入图像描述

以下代码位于userform模块中.选项明确

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
Run Code Online (Sandbox Code Playgroud)

所以现在这里是我遇到问题的地方.这将导致36个对象全部相同.

Dim Prompt As New clsPrompt

For Each Prompt In PromptsCollection
    MsgBox (Prompt.Name)

Next
Run Code Online (Sandbox Code Playgroud)

我甚至将它推到了观察窗口,以验证所有物体的表面都是相同的.它总是在桌子底部抽屉前高度的最后一行产生.

希望这很清楚.提前致谢.

小智 7

使用时As New,VBA将在第一次使用时创建对象的新实例.您应该避免使用As New和使用此模式:

Dim NewPrompt As clsPrompt

For Each PromptRow In PromptsRange.Rows
    Set NewPrompt = New clsPrompt
Run Code Online (Sandbox Code Playgroud)