Excel 使用loop-VBA创建结构

Excel 使用loop-VBA创建结构,excel,vba,Excel,Vba,我试图循环遍历一个表,并为每一行创建一个结构实例。我遇到的问题是每个结构的命名都不同。这就是我目前所拥有的。我还没有启动单个结构,因为我一直坚持用不同的名称命名它们。。。怎么做 Public Type Suggestion Person As String Suspect As String Weapon As String Room As String Refuted As String Card As String End Type

我试图循环遍历一个表,并为每一行创建一个结构实例。我遇到的问题是每个结构的命名都不同。这就是我目前所拥有的。我还没有启动单个结构,因为我一直坚持用不同的名称命名它们。。。怎么做

Public Type Suggestion

    Person As String
    Suspect As String
    Weapon As String
    Room As String
    Refuted As String
    Card As String
    
End Type

Do While Application.WorksheetFunction.IsText(CCell)
    Dim Name As String
    Name = "Suggestion" & CStr(NSelections + 1)
    Dim Name As Suggestion
    //Initiate struct instance
    NSelections = NSelections + 1
    CCell = Cells(3 + NSelections, 9)
Loop

不幸的是,你的意图并不完全清楚。但是,下面的代码将使您走上正确的道路。请试一试

Public Type Suggestion
    Person As String
    Suspect As String
    Weapon As String
    Room As String
    Refuted As String
    Card As String
End Type

Sub Macro()

    Dim Temp    As Suggestion   ' instance of 'Suggestion' type
    Dim R       As Long         ' loop counter: rows
    
    For R = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        With Temp
            .Person = Cells(R, 1).Value
            .Suspect = Cells(R, 2).Value
            .Weapon = Cells(R, 3).Value
            .Room = Cells(R, 4).Value
            .Refuted = Cells(R, 5).Value
            .Card = Cells(R, 6).Value
        End With
    Next R
    
    With Temp
        MsgBox .Person & vbCr & _
               .Suspect & vbCr & _
               .Weapon & vbCr & _
               .Room & vbCr & _
               .Refuted & vbCr & _
               .Card
    End With
End Sub
我的代码的目的是演示如何使用您创建的
类型。它显示了如何将工作表中的值分配给
类型的每个成员。然后,它将向您展示如何检索指定的值

对于它的其余部分,它没有意义,因为只有变量
Temp
的一个实例。来自每一行的数据都会被写入其中,每一个新行都会覆盖上一行,因此最后只保留最后一行的数据。现在,您可以创建一个数组,比如Temp(10),为每个元素分配一个不同的
Suggestion
实例,并使用Temp(2).Person这样的语法调用成员。这项工作做得很好,但问题是怎么做。您最好使用表或将表复制到其中的数组。
类型
数据类型可能不是处理需要内存中所有内容的数据的最有效方法


我从来没有机会在我的项目中使用
类型。但我认为它的最佳用途是保存单个数据集,正如上面的代码所示。不要创建多个
Temp
实例,而是查找所需的原始数据,并将该行中的数据分配给
Temp
。然后,如果您想要另一个实例,请为下一次创建它。

当您
Dim Name As Suggestion
时,您只需覆盖刚才在该变量中填充的内容。如果您想按名称引用结构,则考虑将它们存储在字典中。