Присвоить значения массиву для l oop VBA - PullRequest
0 голосов
/ 27 января 2020

Любой может проверить код, я объяснил код в комментариях.

Я получаю ошибку запуска 13

Моя проблема в методе присвоения, который я использую. Я хочу присвоить значение ячейки в начальной позиции массива 0

Спасибо большое mu sh

Sub zones()

Dim Top10zones(0 To 9) As Long
Dim found As Boolean

Top10zones(0) = 309101502

NumRows = Range("A1", Range("A1").End(xlDown)).Rows.count

Dim Arry As Variant

Dim count As Integer
count = 0

' find the 10zones in row 1.
Range("A1").Select
    Do Until IsEmpty(ActiveCell)
         If ActiveCell.Value = Top10zones(0) Then
            found = True
            Exit Do
         End If

         ActiveCell.Offset(0, 1).Select
      Loop
   ' if found move to row 2 in the same cloumn.
      If found = True Then
      ActiveCell.Offset(1, 0).Select

      For j = 2 To NumRows
      If ActiveCell.Value <= 1 Then
         ' if the value <= 1 assign cells(j,1) to the array.
        Arry(count) = Cells(j, 1).Value
        count = count + 1
      End If
      ActiveCell.Offset(1, 0).Select

      ' repeat the process.
      Next j


      End If

End Sub

1 Ответ

1 голос
/ 27 января 2020

В VBA массивы инициализируются с фиксированной длиной. Например, массив длины 1 будет иметь только индекс Array(0) и никаких других. Если вы хотите увеличить размер массива (без уничтожения текущего содержимого массива), вам нужно использовать ReDim Preserve Arry(new_length). Поэтому, если вы ReDim Preserve Arry(10), ваш массив теперь готов для 10 элементов, и если у вас уже есть какие-либо элементы в массиве, они сохраняются.

Существует два способа инициализации массива.

1)

Dim myArry(0 to 1) as String

Это массив с двумя пустыми элементами, готовыми принять строку.

2)

Dim myArry as Variant
myArry = Array("", "")

Это массив с двумя «пустыми» элементами, готовыми принять строку.

Чтобы изменить длину:

For i = 1 to 10
    ReDim Preserve myArry(i)
    myArry(i) = 'whatever
Next i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...