MWStruct类

MWStruct类与经过编译的类方法传递struct类型的数据,本类包含7个属性和方法。

Initialize方法。本方法用指定的数值、维的大小和指定的域名列表分配结构数组。参数varDims为维数组,可选;varFieldNames为域名数值,可选。

注意:创建以后,有一个的MWStruct对象,没有字段,Initialize方法确定数组维数并添加一

注意:创建以后,有一个的MWStruct对象,没有字段,Initialize方法确定数组维数并添加一系列命名字段给每个元素。每次调用相同对象的Initialize方法时,都会重新定义维。如果不提供varDims变量,则不会改变已经存在的数和数组维的大小。如果不提供varFieldNames变量,则已经存在的字段列表不会改变,调用没有参数的Initialize方法同样不改变数组。

下面的VBA代码演示Initialize方法的使用。

code.excel vba
Sub foo ()
 	Dim x As MWStruct
 	Dim y As MWStruct
 	On Error Goto Handle_Error
     '为x和y创建一个没有字段的的结构数组
code.excel vba
     '为x和y创建一个没有字段的的结构数组
 	Set x=new MWStruct
 	Set y=new MWStruct
 	'把x初始化为的结构数组,字段包括"red", "green"和"blue"
code.excel vba
 	'把x初始化为的结构数组,字段包括"red", "green"和"blue"
 	Call x.Initialize(text-blue-400">Array(2,2), text-blue-400">Array("red", "green", "blue"))
 	'把y初始化为的结构数组,字段包括"name"和"age"
code.excel vba
 	'把y初始化为的结构数组,字段包括"name"和"age"
 	Call y.Initialize(5, text-blue-400">Array("name", "age"))
 	'把x的大小改为,字段名不变
code.excel vba
 	'把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属性。该属性为只读属性。它返回包含结构数组中元素字段名称长度的数组。

下面的例子演示如何获取一个二维结构数组的字段。

code.excel vba
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不变。

code.excel vba
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属性。该属性为只读属性。它返回结构数组中元素字段名长度的数组。