为什么" Rank_Eq"打破我的循环?

时间:2015-09-24 11:39:12

标签: excel vba excel-vba

我有一个涉及排名值的程序。我的代码(剥离到重要部分)看起来像这样:

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)的值,但它在j = 1时突破循环当我使用Application.Rank_Eq()公式时。

我做过一些非常愚蠢的事情,我无法看到,或者这是一个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)的每个值。但是,如果我在下一个MsgBox a之前添加k,那么它会中断。这表明它与Rank_Eq返回的值有关,没有?

1 个答案:

答案 0 :(得分:0)

enter image description here

不确定这是问题的一部分 - 但我必须通过Rank_Eq对象访问WorksheetFunction方法,而不是Application对象。

其次,您会注意到此函数需要DoubleRange作为前两个参数。目前,您提供Variant以及Index()方法的任何值。

尝试将Variant转换为Double,以便第一个参数:

CDbl(myArray(3, j))

对于第二个参数,我不知道你的问题如何填充数组,所以我无法猜出Range参数需要引用的位置......