MWStruct类与经过编译的类方法传递struct类型的数据,本类包含7个属性和方法。
Initialize方法。本方法用指定的数值、维的大小和指定的域名列表分配结构数组。参数varDims为维数组,可选;varFieldNames为域名数值,可选。
注意:创建以后,有一个的MWStruct对象,没有字段,Initialize方法确定数组维数并添加一系列命名字段给每个元素。每次调用相同对象的Initialize方法时,都会重新定义维。如果不提供varDims变量,则不会改变已经存在的数和数组维的大小。如果不提供varFieldNames变量,则已经存在的字段列表不会改变,调用没有参数的Initialize方法同样不改变数组。
下面的VBA代码演示Initialize方法的使用。
Sub foo ()
Dim x As MWStruct
Dim y As MWStruct
On Error Goto Handle_Error
'为x和y创建一个没有字段的的结构数组
Set x=new MWStruct
Set y=new MWStruct
'把x初始化为的结构数组,字段包括"red", "green"和"blue"
Call x.Initialize(text-blue-400">Array(2,2), text-blue-400">Array("red", "green", "blue"))
'把y初始化为的结构数组,字段包括"name"和"age"
Call y.Initialize(5, text-blue-400">Array("name", "age"))
'把x的大小改为,字段名不变
Call x.Initialize(text-blue-400">Array(3,3))
'给y添加一个新的字段
Call y.Initialize(, text-blue-400">Array("name", "age", "salary"))
Exit Sub
Handle_Error:
text-blue-400">MsgBox(Err.Description)
End Sub
Item属性。该属性是MWStruct类的默认属性。本属性用于设置/获取结构数组中一定编号的字段的值。参数i0, i1, …, i31为可选项,可以是0到31之间的编号变量。若要引用数组的一个元素,则指定字段名的所有编号。
NumberOfFields属性。该属性为只读属性。它返回结构数组中的字段个数。
NumberOfDims属性。该属性为只读属性。它返回结构数组中的维数。
Dims属性。该属性为只读属性。它返回包含结构数组中元素字段名称长度的数组。
下面的例子演示如何获取一个二维结构数组的字段。
Sub foo ()
Dim x As MWStruct
Dim Dims as Variant
Dim FieldNames As Variant
On Error Goto Handle_Error
'
'... Call a method that returns an MWStruct in x
'
Dims=x.Dims
FieldNames=x.FieldNames
For I From 1 To Dims(1)
For J From 1 To Dims(2)
For K From 1 To x.NumberOfFields
y=x(I,J,FieldNames(K))
' ... Do something with y
Next
Next
Next
Exit Sub
Handle_Error:
text-blue-400">MsgBox(Err.Description)
End Sub
Clone方法。该方法创建一个MWStruct对象的拷贝。参数为ppStruct,为MWStruct型,是一个接收拷贝的未初始化的MWStruct对象的引用。
本例演示赋值与MWStruct对象的Clone方法之间的不同。用已知对象x1创建新对象时,如果采用赋值方法得到新对象x2,用Clone方法得到新对象x3,则当x1改变时,x2随之改变,x3不变。
Sub foo ()
Dim x1 As MWStruct
Dim x2 As MWStruct
Dim x3 As MWStruct
On Error Goto Handle_Error
Set x1=new MWStruct
x1("name")="John Smith"
x1("age")=35
'设置x1的引用为x2
Set x2=x1
'为x3创建新对象,并把x1的内容复制到x3
Call x1.Clone(x3)
'x2的"age"字段也改变了,x3'的"age"字段不变
x1("age")=50
.
.
.
Exit Sub
Handle_Error:
text-blue-400">MsgBox(Err.Description)
End Sub
FieldNames属性。该属性为只读属性。它返回结构数组中元素字段名长度的数组。