2011-03-10 69 views
1

我在我的程序中遇到了for循環的問題。現在我有兩個數組填充任意數字。這兩個數組的大小相同。基本上我希望用戶指定他們想要在陣列上做什麼樣的操作,然後我會執行它們(因爲數組的尺寸是相同的)。下面是代碼,我試圖填充原來的兩個陣列之間的答案陣列的區別:VBA Excel在兩個陣列上執行操作

If (LCase(diffOrPercent = "difference")) Then 
    For iRow = 1 To totalRow 
     For iCol = 1 To totalCol 
      answerArray(iRow, iCol) = s2Array(iRow, iCol) - s3Array(iRow, iCol) 
     Next iCol 
    Next iRow 
End If 

說我有是,answerArray完全是空白的,當我試圖把它打印出來的問題。有誰知道發生了什麼事?

注:如果for循環從0到年底發生同樣的錯誤 - 1,當我把以下內容:

answerArray(iRow, iCol) = s2Array(iRow, iCol).Value2 - s3Array(iRow, iCol).Value2 

除了當我把值而不是值2。

謝謝

傑西Smothermon

+0

你確實有你的s2Array和s3Array中的值嗎?什麼是數組的數據類型?使用本地窗口查看正在使用哪些值並將其分配給陣列。 – Fink 2011-03-10 20:14:14

+0

是的,我有另一個循環吐出答案,並且s2Array和s3Array在它們的單元格中都有正確的值。現在的數據類型只是整數,但我猜有雙打的潛力。現在我只是將三個數組聲明爲Dim s2Array()等 – 2011-03-10 20:18:29

+0

其實,我只是做了一個測試,我在ActiveCells上執行了這個表達式,而不是做出答案數組,然後答案出來了。我仍然想知道問題在這裏,但因爲它在擾亂我。謝謝 – 2011-03-10 20:21:35

回答

2

我想通了,if語句寫得不對,所以代碼的操作部分甚至沒有被擊中。我搞砸了上LCASE括號,所以修正低於

If (LCase(diffOrPercent) = "difference") Then 
    For iRow = 1 To totalRow 
     For iCol = 1 To totalCol 
      answerArray(iRow, iCol) = s2Array(iRow, iCol) - s3Array(iRow, iCol) 
     Next iCol 
    Next iRow 
End If 

這就使得可變diffOrPercent將全部小寫,而不是.....以及我不,當我最初以爲出了什麼事如果聲明被實現,這是有道理的,因爲if語句中沒有內容被擊中。對不起,我完全浪費了每一個人的時間,但我真的很感謝所有的快速回復

+1

很高興聽到它被排序。您可以通過點擊此答案上的向上/向下箭頭旁邊的空白複選標記來接受您自己的答案。 – 2011-03-10 22:02:27

+0

@Otaku,一旦他們允許我也會這樣做。顯然你不能在你發佈的頭兩天內接受你自己的回答。最有可能與聲譽有關 – 2011-03-10 22:12:34

0

跳轉出來的第一件事情是,你是假設數組爲1。開始索引除非你有明確規定,地方(無論是在聲明數組或與Option Base 1)則數組中的第一項將有0.1

索引如果你不知道數組邊界,直到運行時,它通常是使用更安全LBoundUBound功能以編程方式確定界限:

If (LCase(diffOrPercent) = "difference") Then 
    For iRow = LBound(s2Array, 1) To UBound(s2Array, 1) 
     For iCol = LBound(s2Array, 2) To UBound(s2Array, 2) 
      answerArray(iRow, iCol) = s2Array(iRow, iCol) - s3Array(iRow, iCol) 
     Next iCol 
    Next iRow 
End If 

請注意,我這裏假設s2Arrays3Array,並answerArray都具有相同的尺寸。因此我只檢查s2Array的界限。

+0

這是正確的假設,他們都是相同的尺寸。我得到了相同的空白輸出,所以我開始認爲我的if語句是錯誤的,這意味着它甚至不會觸及代碼的操作部分,當我通過調試器推送它時,diffOrPercent的值爲「Difference 「......但.....不應該把它搞亂,因爲LCase? – 2011-03-10 20:33:19

+0

好吧....這完全是問題,我用用戶輸入「差異」而不是「差異」再次運行它,它運行的很好。但我認爲LCase是想做到的,所以程序不會擔心是否有大寫字母。它與我的想法有什麼不同? – 2011-03-10 20:35:21

+0

'(LCase(diffOrPercent)=「差異」)'!! – 2011-03-10 20:40:32