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

Joh*_*ley 4 excel vba excel-vba

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

我的变数:

Dim Generation As Integer
Dim Chromolength As Integer
Dim varchromolength As Integer
Dim Poparr() As Integer
Run Code Online (Sandbox Code Playgroud)

然后我从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
Run Code Online (Sandbox Code Playgroud)

然后是错误发生的编码:

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
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*iel 5

根据您的代码,您永远不会分配数组的维度.要做到这一点,你的循环之前插入此行,设置的值之后PopSizeChromoLength.

Redim Poparr(1 to PopSize, 1 to ChromoLength)
Run Code Online (Sandbox Code Playgroud)

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