根据条件

时间:2016-03-16 12:50:47

标签: excel vba loops multidimensional-array

我试图基于一些条件循环一个二维数组。我想我的语法必须错误,因为我的条件不会触发新循环(通过日期数组)。这个新循环将测试用户输入日期(“lastdate”)= UACFArray(1,0),如果没有查找该日期是否在UACFArray(1,0)和&存储的值之间。 UACFArray(0,m)如果是,则使用该数组中的下一个位置(UACFArray(l + 1,0)/ UACFArray(0,m + 1)。

在您查看所有内容之前的一些有用信息:

a()是原始循环中的原始数组(循环i),这是其中的一部分。这个循环卡在循环i的最后,所以它检查最后一次。循环i以()中每个步骤的case select语句开头。我把这个循环停留在(循环i的)末尾,以便在满足条件时覆盖先前的值。

如果这总体上草率而且非常糟糕,请随意提出最佳实践方法,因为我希望学习更好的方法来思考这些事情。

例如:用户输入是1/3/15(并且由于代码表示采用lastdate + 7进行检查),条件不会触发循环来检查是否1)1/3/15不匹配UACFArray(1,0)也不检查它是否在UACFArray(l,0)和&之间。 UACFArray(0,m)。输出是case select中的原始参数的输出。

示例代码:

UACFArray(0, 0) = #1/6/2015#: UACFArray(0, 1) = #2/3/2015#
UACFArray(1, 0) = #1/20/2015#: UACFArray(1, 1) = #2/17/2015#
UACFArray(2, 0) = #2/10/2015#: UACFArray(2, 1) = #3/10/2015#
UACFArray(3, 0) = #2/24/2015#: UACFArray(3, 1) = #3/24/2015#
UACFArray(4, 0) = #3/17/2015#: UACFArray(4, 1) = #4/14/2015#
UACFArray(5, 0) = #3/31/2015#: UACFArray(5, 1) = #4/28/2015#
UACFArray(6, 0) = #4/21/2015#: UACFArray(6, 1) = #5/19/2015#
UACFArray(7, 0) = #5/5/2015#: UACFArray(7, 1) = #6/2/2015#
    If CheckBox = True And (ComboBox = "Text1" Or ComboBox = "Text2") And i = a(0) Then
        For l = LBound(UACFArray, 1) To UBound(UACFArray, 1)
            For m = LBound(UACFArray, 2) To UBound(UACFArray, 2)
                If (LastDate + 7) <> UACFArray(l, 0) And (LastDate + 7) > UACFArray(l, 0) And (LastDate + 7) < UACFArray(0, m) Then
                    BlcokStart = UACFArray(l + 1, 0)
                    BlockEnd = UACFArray(0, m + 1)
                End If
            Next m
        Next l
    ElseIF ComboBox = "Text1" Or ComboBox = "Text2" Then
        For l = LBound(UACFArray, 1) To UBound(UACFArray, 1)
                If UACFArray(l, 0) = BlcokStart Then
                    For m = LBound(UACFArray, 2) To UBound(UACFArray, 2)
                        BlockEnd = UACFArray(l, m)
                        a(i) = BlcokStart & " & " & BlockEnd
                        BlcokStart = UACFArray(l + 1, m)
                    Next m
                End If
        Next l
    End If

1 个答案:

答案 0 :(得分:0)

您的语法似乎不正确,您需要control.value才能检查组合框中的内容。 例: ElseIF ComboBox =&#34; Text1&#34;或ComboBox =&#34; Text2&#34;然后

应该是: ElseIF ComboBox.Value =&#34; Text1&#34;或ComboBox.Value =&#34; Text2&#34;然后

另外我想指出你检查条件&#34;复选框已被用户检查&#34;与行

checkbox.value = -1表示已选中且

checkbox.value = 0表示未选中。

(我知道,这确实违反直觉。)

代码&#34;如果checkbox = true则...&#34;不会导致错误,但我认为这不是你想要的。

相关问题