2016-03-16 90 views
0

我想通過基於幾個條件的二維數組循環。我想我必須讓我的語法錯誤,因爲我的條件沒有觸發新的循環(通過日期數組)。這個新循環將測試用戶輸入日期(「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 
+0

請注意,我在編輯過程中所做的更改使得程序的邏輯分支變得更加清晰 - 每個子分支都比上面的分支更加縮進,這樣您可以查看路徑以查看所有內容如何嵌套在一起。這是VBA標準慣例,或多或少反映了其他語言的做法。 –

+0

另外 - 你的問題措辭不好 - 你用你的問題中的內部術語指的是變量和函數名稱,這最初並不清楚。輸入和輸出的一些示例將有助於顯示程序的邏輯。 –

回答

0

看來,你的語法不正確,則需要control.value以檢查你是怎樣的組合框。 例子: ELSEIF組合框= 「文本1」 或ComboBox = 「文本2」 然後

應該是: ELSEIF ComboBox.Value = 「文本1」 或者ComboBox.Value = 「文本2」 然後

此外,我想要指出的是,你檢查的條件與行

checkbox.value = -1檢查和

checkbox.value = 0,選中「複選框已被用戶選中」。

(這確實是違反直覺的,我知道。)

代碼「如果複選框= true,那麼......」不會導致錯誤,但它不是你在找什麼,因爲我承擔。

+0

當我把它放在這裏時,我忘了包含.value。但是,複選框的真/假評估是正確的(特別是如果您給複選框一個自定義名稱)。 –