ReDim не работает внутри цикла for, нет пересчета размера массива

#arrays #excel #vba #loops

#массивы #excel #vba #циклы

Вопрос:

У меня есть следующий код ниже, проблема в том, что размер массива «varray» не обновляется каждый раз, когда вставляется новая строка, я знаю это, проверяя значение varray каждый раз, когда новая строка вставляется с помощью кода в Excel. Это означает, что код остановится в конце фиксированного массива. Я попытался повторить в нескольких точках, чтобы посмотреть, сработало ли это, но это не так.

 Sub test()

Dim i As Long
Dim numbers() As Integer
Dim varray As Integer

varray = Sheets("Original").Cells(Rows.Count, "A").End(xlUp).Row
ReDim Preserve numbers(varray)

For i = 10 To varray
ReDim numbers(varray)
    If Cells(i, 16).Value <> "" Then
        Cells(i   1, 16).EntireRow.Insert
        Cells(i   1, 1).EntireRow.Value = Cells(i, 1).EntireRow.Value
        Cells(i   1, 6).Value = Cells(i, 16).Value
        Cells(i   1, 1).Value = 20305
        Cells(i   1, 11).Value = ""
        Cells(i   1, 12).Value = ""
        Cells(i   1, 15).Value = ""
        Cells(i   1, 16).Value = ""
        i = i   1
        ReDim numbers(varray)
    End If
    ReDim numbers(varray)
Next i

End Sub
 

Ответ №1:

Вы никогда не меняли значение varray , поэтому ваши ReDim операторы всегда изменяют размер массива до его начального значения.

varray был назначен:

 varray = Cells(Rows.Count, "A").End(xlUp).Row
 

Значение этой переменной не изменяется просто путем вставки ячеек / строк на листе.

Комментарии:

1. я предположил, что это изменение значения, как мне это добавить? @davidZemens

2. varray = _some_value_ — Я не знаю, какую логику вам нужно использовать для ее увеличения, это может быть просто varray = varray 1 или может потребоваться что-то другое.