2015-09-24 43 views
0

我有一個涉及排序值的過程。我的代碼(精簡到重要部件)看起來是這樣的:爲什麼「Rank_Eq」打破了我的循環?

Dim myArray() as variant 
ReDim myArray(1 to 4, 1 to x) 

for i = 1 to x 
    myArray(1,i) = a 
    myArray(2,i) = b 
    myArray(3,i) = c 
next i 

for j = 1 to x 
    myArray(4,j) = Application.Rank_Eq(myArray(3,j), Application.Index(myArray,3,0), 1) 
next j 

for k = 1 to x 
    myFunction(myArray(4,k)) 
next k 

調試吧,for j = 1 to x循環工作正常,如果我只是返回,說的j的價值或myArray(3,j)的價值,但它爆發的當我使用Application.Rank_Eq()公式時,在j = 1處循環。

我做了一些真正愚蠢的事情,我無法看到,或者這是一個Excel問題?

編輯:

我嘗試使用以下調試:

myIndex = Application.Index(myArray,3,0) 

for k = 1 to x 
    MsgBox myIndex(k,1) 
    a = Application.Rank_Eq(myIndex(1,k), editedRows, 1) 
next k 

這似乎運行正常 - 返回即myIndex(k,1)每個值。但是,如果我在下一個k之前添加MsgBox a,則會中斷。這表明這與Rank_Eq返回的值有關,不是嗎?

+2

我會將該行分成幾行:'myVal = myArray(3,j)'和'myIndex = Application.Index(myArray,3,0)'和'myArray(4 ,j)= Application.Rank_Eq(myVal,myIndex,1)'。這樣調試起來就更容易了,它在哪裏是失敗的。 –

+0

@TorstenLink - 請參閱我的編輯。我仍然不明白是什麼導致了這個問題。 – apkdsmith

+0

從研究看來,Rank_Eq看起來不接受參考數組 - 它需要作爲參考... – apkdsmith

回答

0

enter image description here

不知道它的問題的一部分 - 但我不得不通過WorksheetFunction對象,而不是Application對象訪問Rank_Eq方法。其次,你會注意到這個函數需要一個Double和一個Range作爲前兩個參數。目前您正在提供Variant以及任何價值來自您的Index()方法。

嘗試鑄造VariantDouble像這樣的第一個參數:

CDbl(myArray(3, j)) 

對於第二個說法,我沒有從你的問題的想法則數組被填充方式,所以我不能猜測,其中Range參數需要參考...