VBA自定义数据类型数组遍历问题:如何在Position最值间循环?
解决VB中"Invalid Qualifier"错误:遍历Position字段的最小到最大值
嘿,这个问题我熟!你遇到的Invalid Qualifier错误,根源是对LBound/UBound的用法理解错啦——这俩函数是用来获取数组本身的索引范围,而不是数组元素里某个字段的取值范围的。你写的Location().position是无效语法,因为Location是数组,VB无法直接识别“数组+字段名”这种写法来调用LBound。
正确的解决思路
要实现“在Position的最小值与最大值之间循环”,你需要分两步走:
- 遍历整个
Location数组,找出所有元素中Position字段的最小值和最大值; - 用找到的这两个值作为循环的上下限。
具体代码示例
假设你的数组已经被正确初始化(包含有效元素),可以参考下面的代码:
' 先修正可能的类型名笔误:如果Type定义的是Posizione,数组声明要对应 ' Public Location() As Posizione Dim minPos As Byte, maxPos As Byte Dim arrIndex As Integer ' 先处理数组为空的边界情况 If UBound(Location) >= LBound(Location) Then ' 初始化min和max为数组第一个元素的Position值 minPos = Location(LBound(Location)).Position maxPos = Location(LBound(Location)).Position ' 遍历数组,更新min和max For arrIndex = LBound(Location) To UBound(Location) If Location(arrIndex).Position < minPos Then minPos = Location(arrIndex).Position End If If Location(arrIndex).Position > maxPos Then maxPos = Location(arrIndex).Position End If Next arrIndex ' 现在可以在Position的最小到最大值之间循环了 For arrIndex = minPos To maxPos ' 这里写入你的循环逻辑 Debug.Print "当前循环的Position值:" & arrIndex Next arrIndex Else Debug.Print "Location数组为空,无法获取Position的取值范围" End If
额外提醒
注意你代码里的类型名一致性:你定义的Type是Posizione(单数),但数组声明是Public Location() as Posizioni(复数),这可能会导致类型不匹配的问题,记得把数组声明修正为Public Location() As Posizione哦。
内容的提问来源于stack exchange,提问作者Massimo Griffani
相关产品推荐
相关产品推荐

