2012-09-25 2 views
4

GA에 대한 채우기 생성을 시도 할 때 오류가 발생했습니다. 인구를 생성하는 데 도움이되는 2 차원 배열을 사용했습니다. 먼저 사용자는 모집단 크기를 입력 한 다음 염색체 길이를 사용자 양식에 입력합니다.VBA 매크로 런타임 오류 '9': 범위를 벗어나는 subscript - 배열

내 변수 :

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 

내가 사과, 내가 :

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 

다음 오류 ocurs가 코딩 :

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

그런 다음 나는 정의 폼에서 값을 가져 오기 VBA에 상당히 새로운 것입니다. 이 오류에 대한 도움을 주시면 감사하겠습니다.

답변

5

코드에 따라 배열의 크기를 할당하지 마십시오. 이렇게하려면 PopSizeChromoLength 값을 설정 한 후 for 루프 앞에이 행을 삽입하십시오.

Redim Poparr(1 to PopSize, 1 to ChromoLength) 

불필요한 세부 사항 : 당신은 단지 Redim Poparr(PopSize, ChromoLength) 실행할 수 있지만 모듈의 상단에 Option Base 1을 추가하지 않는 한 그 ... 0 to Popsize 등이었다 배열 될 것이다. 배열의 기본베이스는 0입니다. 컨텍스트에 따라 기본값이 0 또는 1 일 수 있으므로 배열의 하한 및 상한을 명시 적으로 나타내는 것이 더 좋습니다.

관련 문제