Как мне избежать «нижний индекс вне диапазона? - PullRequest
1 голос
/ 28 апреля 2019

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

Цикл останавливается после 4 акций и выдает ошибку «Подпись вне диапазона».Я могу запустить код над первым 95 «i», т.е. если я преобразую первую часть:

For i = 4 To 95
        If Cells(i, 1) <> Cells(i - 1, 1) Then Clean_Stock_2 (i)

Код:

**Sub Outer_Loop()
For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row**
    If Cells(i, 1) <> Cells(i - 1, 1) Then Clean_Stock_2 (i)
Next i
End Sub


Sub Clean_Stock_2(ByVal r As Long)

Dim Stock(31, 5)
Dim Quarter(31)
Dim Bo As Boolean

Charge = 0

'Frame
For i = 0 To 31
    Stock(i, 0) = Cells(r, 1)
    Stock(i, 1) = Cells(r, 2)
    Stock(i, 2) = Cells(r, 3)
    Stock(i, 5) = "Q" & Format(DateAdd("q", i, #1/1/2011#), "q-YYYY")
    Quarter(i) = Stock(i, 5)
Next i

'Data
Do While Cells(r, 1) = Stock(0, 0)
    Qu = "Q" & Format(Cells(r, 4), "q-YYYY")
    rr = Application.Match(Qu, Quarter, 0)
    If Not IsError(rr) Then
        Stock(rr, 3) = Cells(r, 4)
        Stock(rr, 4) = Cells(r, 5)
        If Not Bo Then Charge = Stock(rr, 4): Bo = True
    End If
    r = r + 1
Loop

'fill
For i = 0 To 31
    If Stock(i, 4) = 0 Then
        Stock(i, 4) = Charge
    Else
        Charge = Stock(i, 4)
    End If
Next i
'Output
lr = Cells(Rows.Count, "I").End(xlUp).Row + 1
lr = IIf(lr < 3, 3, lr)
Cells(lr, "I").Resize(32, 6) = Stock
End Sub
...