vb中Redim语句报错,解决即结贴

vb中Redim语句报错,在线等,解决即结贴!
vb 中,为什么 
ReDim fzStatAnalys0(1 To i) As fzStatAnalys 没问题

ReDim Preserve fzStatAnalys0(1 To i) As fzStatAnalys 就报错呢?

VB code
Public Type fzStatAnalys
    sbh As String          
    sbxh As String         
    workType As Byte       
    Driver As Long         
    StarTime As Long       
    EndTime As Long       
    keepTime As Long      
    by As String           
End Type


------解决方案--------------------
先定义一个数组,再动态改
VB code
Dim i As Integer
Dim fzStatAnalys0() As fzStatAnalys
i = 2
ReDim fzStatAnalys0(1 To i) As fzStatAnalys
fzStatAnalys0(1).by = "1"

i = 3
ReDim Preserve fzStatAnalys0(1 To i) As fzStatAnalys
Debug.Print fzStatAnalys0(1).by

------解决方案--------------------
redim用来重新定义数组大小, 如果只要更改最后一个维度的大小时,并保留现有数组中的数据就用Preserve

但是redim不能改变数组的类型, 所以后面不要 as XXX


------解决方案--------------------
Dim fzStatAnalys0() As fzStatAnalys

ReDim Preserve fzStatAnalys0(1 To i)