Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA中对对象集合进行排序_Vba_Sorting_Collections_Excel - Fatal编程技术网

在VBA中对对象集合进行排序

在VBA中对对象集合进行排序,vba,sorting,collections,excel,Vba,Sorting,Collections,Excel,我正在尝试编写一个函数来对对象集合进行排序。由于对象都是相同的类型(相同的用户定义类),因此它们的属性集是相同的。是否可以(通过代码)发现对象的属性,以便将集合放入二维数组中,每行代表一个对象,每列代表其一个属性 另一种解决方案是将集合中的每个对象复制到一个对象数组中,并按其中一个属性对它们进行排序,该属性的名称作为字符串传递给函数。但是,我不知道如何使用作为字符串传递的属性名称来指向对象的属性。对于集合,最好按其键对其进行排序(这就是它们的作用)——但如果没有键列表(丢失了键!): 提出您自己

我正在尝试编写一个函数来对对象集合进行排序。由于对象都是相同的类型(相同的用户定义类),因此它们的属性集是相同的。是否可以(通过代码)发现对象的属性,以便将集合放入二维数组中,每行代表一个对象,每列代表其一个属性


另一种解决方案是将集合中的每个对象复制到一个对象数组中,并按其中一个属性对它们进行排序,该属性的名称作为字符串传递给函数。但是,我不知道如何使用作为字符串传递的属性名称来指向对象的属性。

对于集合,最好按其键对其进行排序(这就是它们的作用)——但如果没有键列表(丢失了键!):

提出您自己的CompareKey函数,如果UDT成员变量之间为>、<或0,该函数将返回true或false。必须删除并重新添加的原因是无法“交换”vb6/vba集合对象中的内部成员

祝你好运

编辑:

要以编程方式访问名称为的属性(作为字符串),请使用VB的
CallByName

 Result = CallByName(MyObject, "MyProperty", vbGet)

如果集合中充满了对象,我想您需要设置vTemp=Data(j),谢谢,但是我如何编写该函数来按任意属性对数据进行排序呢?我必须在函数中硬编码属性的名称吗?我更喜欢把它当作一个论据来传递。非常简单。使用
CallByName
 Result = CallByName(MyObject, "MyProperty", vbGet)