首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA宏运行时错误'9':下标超出范围-数组

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

Stack Overflow用户
提问于 2012-09-25 23:10:51
回答 1查看 5.4K关注 0票数 4

当我尝试为GA生成一个总体时,我遇到了一个错误。我使用了一个二维数组来帮助生成一个种群。首先,用户将在用户表单中输入种群大小,然后输入染色体长度。

我的变量:

代码语言:javascript
复制
Dim Generation As Integer
Dim Chromolength As Integer
Dim varchromolength As Integer
Dim Poparr() As Integer

然后我从用户表单中获取这些值:

代码语言:javascript
复制
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

然后出现错误的代码如下:

代码语言:javascript
复制
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的新手。对此错误的任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-25 23:15:52

根据您的代码,您永远不会分配数组的维数。要执行此操作,请在设置PopSizeChromoLength的值之后,在for循环之前插入此行。

代码语言:javascript
复制
Redim Poparr(1 to PopSize, 1 to ChromoLength)

不必要的细节:你可以只运行Redim Poparr(PopSize, ChromoLength),但这会导致数组被0 to Popsize,等等。除非您将Option Base 1添加到模块的顶部。数组的默认基数是0。我觉得显式地指出数组的下界和上界是更好的,因为默认值可以是0或1,这取决于上下文。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12585914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档