VBA宏运行时错误'9':下标超出范围 - 数组

时间:2012-09-25 15:10:51

标签: excel-vba vba excel

当我尝试为GA生成人口时,我遇到了错误。我用二维数组来帮助生成一个人口。首先,用户将输入种群大小,然后输入染色体长度,进入用户形式。

我的变数:

Dim Generation As Integer
Dim Chromolength As Integer
Dim varchromolength As Integer
Dim Poparr() As Integer

然后我从userform获取值:

PopSize = PopulationSize.value
aVariables = AOV.value          'assign userform value entered to this variable
varchromolength = Chromolengthentered.value    'assign userform value entered to this   variable
Chromolength = varchromolength * aVariables   'Chromosome length equals the length of     each varaible chromosome combined

然后是错误发生的编码:

For i = 1 To PopSize           
   For j = 1 To Chromolength       
    If Rnd < 0.5 Then           
        Poparr(i, j) = 0   'assign o to gene
    Else
        Poparr(i, j) = 1   'assign 1 to gene     
    End If
   Next j
Next i

我道歉,我对VBA很新。任何有关此错误的帮助将不胜感激。

1 个答案:

答案 0 :(得分:5)

根据您的代码,您永远不会分配数组的尺寸。为此,请在设置PopSizeChromoLength的值后,在for循环前插入此行。

Redim Poparr(1 to PopSize, 1 to ChromoLength)

不必要的详细信息:您可以运行Redim Poparr(PopSize, ChromoLength),但这会产生0 to Popsize等数组...除非您将Option Base 1添加到顶部你的模块。数组的默认基数为0.我觉得最好明确指出数组的下限和上限,因为默认值可以是0或1,具体取决于上下文。