Excel VBA 用于带有 IF 和变量的嵌套循环

Excel VBA For Nested Loop with IF and variables

提问人:Andres Cobos 提问时间:7/1/2023 最后编辑:Andres Cobos 更新时间:7/1/2023 访问量:56

问:

我有 10 条可以使用的真空感应线(VacLine(x) 变量),这些是位于多选列表框上的奇数(从 1 到 19)。根据这些选项的选择,我想为 10 个 VacLine(x) 变量中的每个变量分配一个值。

enter image description here

在这种情况下,将从 ListBox 中选择驱动编号,找到该编号后,它应该将其分配给 VacLine(x),然后从它计数的最后所选值转到下一个 x。最小选择是 1,最大选择是 10,而不是按特定顺序。

例如,我选择了 3、17 和 19,然后 VacLine1 = 3,VacLine2 = 17 和 VacLine3 = 19,VacLine4 到 VacLine10 = 0。 VacLinesList 是我的 ListBox。 VacLine(x) 是我的变量 Dimmed 为Dim VacLine(1 To 10) As Integer

    With VacTC.VacuumLinesList
    
    For q = 1 To 10
        v = 0
        For v = v To .ListCount - 1
            If VacLine(q) = "" Then
                If .Selected(v) Then
                VacLine(q) = .List(v)
                Exit For
                End If
            Exit For
            End If
        Next v
    Next q
    
End With

我不知道如何强制它将找到的值分配给 VacLine(x),然后转到下一个 x,但从最后找到的选定值开始。

Excel VBA for 变量 嵌套循环

评论


答:

3赞 JohnM 7/1/2023 #1

假设是你的 ListBox 并且是你的数组(已经VacuumLinesListVacLineDimmed)

With VacuumLinesList
    Dim i As Long, j As Long
    j = LBound(VacLine)
    For i = 0 To .ListCount - 1
        If .Selected(i) Then
            VacLine(j) = .List(i)
            j = j + 1
        End If
    Next i
    ' produce test output
    For i = LBound(VacLine) To UBound(VacLine)
        Debug.Print i, VacLine(i)
    Next i
End With

... 是项索引,是数组索引iListBoxj

评论

0赞 Andres Cobos 7/1/2023
没错,VacuumLinesList 是我的 ListBox,VacLine 是我的数组已经变暗为 Dim VacLine(1 To 10) As String,但我输入了代码并且似乎不起作用。
0赞 JohnM 7/1/2023
你能澄清一下“没用”吗?是否存在错误或输出与您的预期不匹配?
1赞 JohnM 7/1/2023
那么你把代码放在哪里了?例如,如果 ListBox 位于用户窗体中,并且您有一个 CommandButton,当您在 ListBox 中选择相关项时单击该 CommandButton(并且可能关闭用户窗体),那么它可以进入该 CommandButton 的 Click 事件处理程序?
1赞 JohnM 7/1/2023
VacLine 需要是一个数组,例如......确保模块中托管了代码Dim VacLine(1 to 10) As VariantOption Explicit
1赞 JohnM 7/1/2023
始终包括 ...它隐藏了错误,让你认为你的代码没问题,而事实并非如此!Option Explicit