You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA自定义数据类型数组遍历问题:如何在Position最值间循环?

解决VB中"Invalid Qualifier"错误:遍历Position字段的最小到最大值

嘿,这个问题我熟!你遇到的Invalid Qualifier错误,根源是对LBound/UBound的用法理解错啦——这俩函数是用来获取数组本身的索引范围,而不是数组元素里某个字段的取值范围的。你写的Location().position是无效语法,因为Location是数组,VB无法直接识别“数组+字段名”这种写法来调用LBound。

正确的解决思路

要实现“在Position的最小值与最大值之间循环”,你需要分两步走:

  1. 遍历整个Location数组,找出所有元素中Position字段的最小值和最大值;
  2. 用找到的这两个值作为循环的上下限。

具体代码示例

假设你的数组已经被正确初始化(包含有效元素),可以参考下面的代码:

' 先修正可能的类型名笔误:如果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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:59:16