我想通過基於幾個條件的二維數組循環。我想我必須讓我的語法錯誤,因爲我的條件沒有觸發新的循環(通過日期數組)。這個新循環將測試用戶輸入日期(「lastdate」)= UACFArray(1,0),並且如果沒有找到該日期是否位於存儲在UACFArray(1,0)中的值之間& UACFArray (0,m)和如果是這樣使用該陣列中的下一個位置(UACFArray(L + 1,0)/ UACFArray(0,M + 1)基於條件循環通過二維數組
你之前一些有用的信息看通過一切:
a()是原始循環(即循環i)中的原始數組,這是該循環的一部分,該循環被卡在循環i的最後,以便它檢查最後一個循環。 ()中每個步驟的case select語句,我在(循環i的)末尾插入這個循環以覆蓋之前的值,如果條件滿足的話。
如果這是總體的草率和簡單的不好,請隨時提出最佳實踐方法,因爲我很樂意學習更好的思考方式。
例如:用戶輸入是1/3/15(並且由於代碼表示採用lastdate + 7進行檢查),條件不會觸發循環來檢查是否1)1/3/15不匹配UACFArray(1,0),也不檢查它是否在UACFArray(1,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
請注意,我在編輯過程中所做的更改使得程序的邏輯分支變得更加清晰 - 每個子分支都比上面的分支更加縮進,這樣您可以查看路徑以查看所有內容如何嵌套在一起。這是VBA標準慣例,或多或少反映了其他語言的做法。 –
另外 - 你的問題措辭不好 - 你用你的問題中的內部術語指的是變量和函數名稱,這最初並不清楚。輸入和輸出的一些示例將有助於顯示程序的邏輯。 –