Arrays 带范围和数组的VBA过程中的下标超出范围错误

Arrays 带范围和数组的VBA过程中的下标超出范围错误,arrays,vba,sorting,Arrays,Vba,Sorting,我已经编写了下面的VBA代码来计算一些阈值,并且在某一点上,我将范围中的值放入数组中。然而,我得到了一个“下标超出范围”错误,尽管我认为我已经定义了所有内容 还是ValerAction()作为变量不正确?它应该是一个数组。。。我正在用Call Tri1(ValeurAction)对其进行排序 选项显式 次级绩效() 长 作为射程的模糊合奏动作 作为整数的Dim Nb_操作 变暗动作作为射程 作为范围的行动 作为整数的Dim i 双色调暗 暗淡的TauxRf为双色 作为双重身份 作为字符串的Dim

我已经编写了下面的VBA代码来计算一些阈值,并且在某一点上,我将范围中的值放入数组中。然而,我得到了一个“下标超出范围”错误,尽管我认为我已经定义了所有内容

还是ValerAction()作为变量不正确?它应该是一个数组。。。我正在用Call Tri1(ValeurAction)对其进行排序

选项显式
次级绩效()
长
作为射程的模糊合奏动作
作为整数的Dim Nb_操作
变暗动作作为射程
作为范围的行动
作为整数的Dim i
双色调暗
暗淡的TauxRf为双色
作为双重身份
作为字符串的Dim noaction
Dim ValeurAction()作为变量
作为整数的Dim NB
使用工作表(“操作”)
Nb_Actions=.Cells(1,Columns.Count).End(xlToLeft).Column
以
使用工作表(“操作”)
设置集合动作=.Range(.Cells(2,1),.Cells(.Rows.Count,Nb_动作).End(xlUp))
以
对于EnsembleActions.Columns中的每个操作
i=i+1
设置动作=动作
TauxRf=工作表(“性能”).单元格(2,2).值
RendsEcart=WorksheetFunction.StDev(CoursAction)
NB=工作表函数计数(CoursAction)
'我们将范围中的值放入表格中
使用工作表(“操作”)
ValeursAction=.Range(.Cells(1,1),.Cells(.Rows.Count,1)).Value
以
'对数组进行排序
呼叫Tri1(行动)
暗阿尔法为双精度
作为双变量的Dim Var
alpha=工作表(“绩效表”)。单元格(3,2)。值
Var=ValeurAction(Int(NB*alpha))
NoAction=工作表(“操作”).单元格(1,i).值
带工作表(“绩效”)
.单元(4+i,1)=无动作
.单元(4+i,2)=变量
以
下一步行动
端接头
子Tri1(作为变体的plaga)
调暗木质,如长
变暗的鱼鳍和鱼鳍一样长
木质纤维=LBound(plaga)
木质翅片=UBound(普拉加)
我和我一样长,我和我一样长
将tmp调暗为长
对于i=ligne_Deb至ligne_Fin-1
对于J=将翅片对齐到i+1步骤-1
如果plaga(J,1)
正在自动标注尺寸的数组(ValeurAction/plaga)具有基于一的尺寸,而不是基于零的尺寸。但对于这些线路:

    If plaga(J, 1) < plaga(J - 1, 1) Then
        tmp = plaga(J, 1)
        plaga(J, 1) = plaga(J - 1, 1)
        plaga(J - 1, 1) = tmp
    End If
如果plaga(J,1)

循环计数器
J
将递减为1,因此
J-1
为零,这超出了数组的界限。

哪一行产生错误?您是否将基于0的对象与基于1的对象混淆了?很容易忘记哪些是哪些。我不这么认为。。。在我添加数组ValeurAction之前,此代码运行良好…将其添加到“Option Explicit”下:Option Base 0那么我是否也应该将Option Base 1放置在第一个子项中?不,您需要更改上面的代码,以便它停止尝试访问零。我尝试了添加Option Base 1和Option Base 0,但仍然出现此错误:(
    If plaga(J, 1) < plaga(J - 1, 1) Then
        tmp = plaga(J, 1)
        plaga(J, 1) = plaga(J - 1, 1)
        plaga(J - 1, 1) = tmp
    End If