Excel 用户定义类型变量

Excel 用户定义类型变量,excel,vba,Excel,Vba,我试图写3个用户定义的类型变量,它们需要像这样相互关联 Type tdrivers Strfirstname as string Strsurname as string Intage as integer End type Type Tcars Strmake as string Strmodel as string Lngcc as long Driverid() as tdrivers End type Type

我试图写3个用户定义的类型变量,它们需要像这样相互关联

Type tdrivers 
    Strfirstname as string
    Strsurname as string 
    Intage as integer
End type

Type Tcars 
     Strmake as string 
     Strmodel as string 
     Lngcc as long
     Driverid() as tdrivers
End type

Type T_Race
     Strlocation as string 
     DteRacedate as date
     IntYear as integer
     CarsID() as Tcars
End Type

Sub CreateRace()

Dim myrace() as T_Race

'Variables to hold integer 'values at runtime
Dim A as integer 
Dim B as integer
Dim C as integer 

'this line redims myrace ok
Redim myrace(A) 

'This line doesn't do anything 
'When I try to redim the 'carsID() array nested inside 'the myrace(A) like so;
Redim myrace(A).carsID(B)

'This line obviously does 'nothing either 
Redim myrace(A).CarsID(B).driverid(C)
我需要能够将比赛分配给myrace()数组,然后将汽车分配给他们参加的每一场比赛,然后将驾驶员分配给他们驾驶的汽车。因此,carsID()必须嵌套在myrace()中,driverid()必须嵌套在carsID()中

一旦我知道如何在中重拨carsID(),就可以重拨Driverid(),它嵌套在中的更深处


如果我用一个常量值(如8)固定所有数组,那么子运行正常,所有比赛、汽车和驾驶员都正确嵌套。嵌套动态阵列上的redim失败。希望这是有意义的。有人能帮忙吗。谢谢

关键是您必须对每个子阵列分别进行
ReDim
。以下示例初始化所有子数组并在末尾打印它们:

Sub Example()
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    
    ReDim myRace(5)
    
    For i = 1 To 5
        ReDim myRace(i).CarsID(5)
        For j = 1 To 5
            ReDim myRace(i).CarsID(j).Driverid(5)
            For k = 1 To 5
                myRace(i).CarsID(j).Driverid(k).Strfirstname = Chr(k + Asc("a")) & Str(i) & Str(j) & Str(k)
            Next k
        Next j
    Next i
    
    ' Now print it
    For i = 1 To 5
        For j = 1 To 5
            For k = 1 To 5
                Debug.Print myRace(i).CarsID(j).Driverid(k).Strfirstname
            Next k
        Next j
    Next i
        
End Sub

在您尝试重拨之前,A、B是否有值?在重拨x(0)之后,您会期望什么?是的,A、B和C变量在重拨之前都有赋值。只有myrace(A)自己重新定尺寸,但在以下情况下失败:;继续的。当像这样嵌套时,CarsID(B)不会重新定尺寸;现在有意义了。非常感谢你的回复,也感谢你用一个例子解释的方式。我回去工作时会试试的。再次非常感谢,感谢上帝,像你这样的专家为像我这样的新手提供了实用示例方面的帮助,而大多数网站在学习时并没有完全解释所有内容。@RichieG记住,如果答案对你有帮助,请标记答案,以便其他人可以找到使代码完全可复制的友好提示:所有三个数组声明都应该插入示例中过程或在模块声明头(
Dim myrace()作为T_Race
Dim CarsID作为TCAR
以及
Dim DriverID作为tdrivers
)中:+)Paul ogilvie,我的问题的示例。重拨每个子阵列时,是否需要使用保留重拨,而不仅仅是重拨。当然,如果您只是单独重拨,那么在循环遍历数组元素时,前面的每个元素都将丢失?@RichieG,很抱歉我的回复太晚了。如果数组包含数据,则应使用
Redim。。。保留
,以便保留现有数据。