Я вижу три причины, по которым ваш код ведет себя не так, как вы ожидаете.
Во-первых, переменные, которые вы используете в качестве индексов в ваших For ... Next
циклах, противоречивы.В этом цикле, например, вы увеличиваете k
, но используете i
для индексации в NamingArray
.Обратите внимание, что i
все еще имеет значение GA+1
, оставшееся от первого цикла.
For k = GA + GB To GA + GB + GC
NamingArray(i) = "GC " & CStr(k)
Next k
Просто используйте i
для всех ваших циклов.Не нужно использовать разные буквы каждый раз.
Во-вторых, вы пытаетесь получить доступ к элементу 0 из NamingArray
, который не существует.
ReDim NamingArray(1 To PartSum) ' starts at 1
For i = 0 To GA
NamingArray(i) = "GA " & CStr(i) ' attempt to refer to NamingArray(0)
Next i
В-третьих, ваша индексация в целом испорчена.Например, NamingArray(GA)
будет записано в конце вашего первого цикла, а затем будет перезаписано в начале вашего второго цикла.Это происходит для всех ваших петель;их "юрисдикции" перекрываются (извините, я канадец).Я исправил это (и все другие ошибки) ниже.Это работает:
For i = 1 To GA
NamingArray(i) = "GA " & CStr(i)
Next i
For i = 1 + GA To GA + GB
NamingArray(i) = "GB " & CStr(i - GA)
Next i
For i = 1 + GA + GB To GA + GB + GC
NamingArray(i) = "GC " & CStr(i - GA - GB)
Next i
For i = 1 + GA + GB + GC To GA + GB + GC + GD
NamingArray(i) = "GD " & CStr(i - GA - GB - GC)
Next i
Теперь, чтобы ответить на ваш вопрос: есть ли лучший способ сделать это?Да.Но это прекрасно работает, и хотя это не красиво, но ни в коем случае не эффективно.