gpt4 book ai didi

vba - Excel VBA 集合不断重复最后一个对象

转载 作者:行者123 更新时间:2023-12-04 21:08:04 25 4
gpt4 key购买 nike

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

这是我的查找表
enter image description here

以下代码位于用户表单模块中。
选项显式

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

我什至把它推到监 window 口,以验证所有物体的表面是否相同。它总是以表格底部抽屉正面高度的最后一行产生。

希望这足够清楚。提前致谢。

最佳答案

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

Dim NewPrompt As clsPrompt

For Each PromptRow In PromptsRange.Rows
Set NewPrompt = New clsPrompt

关于vba - Excel VBA 集合不断重复最后一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39339741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com