Индекс вне диапазона, перемещение данных из диапазона в массив - PullRequest
0 голосов
/ 17 июня 2019

Я совершенно новичок в программировании здесь.

Я получаю нижний индекс ошибки вне диапазона для следующего кода:

b(i) = ThisWorkbook.Sheets("trades").Range("AA & arxi +i-1:AD& arxi+i-1").Value

Я полагаю, что это связано с синтаксисом, или, может быть, потому, что я не переделал b(vdomada,4)?

В любом случае данные из диапазона не попадают в массив. Результатом будет ввод данных в массив, а затем их экспорт в другой файл Excel (бит экспорта не входит в предоставленный код)

Заранее спасибо за помощь.

Sub report()
Dim b As Variant, arxi As Integer, telos As Variant
Dim LastDayRow As Integer, vdomada As Integer, i As Integer, z As Integer
Dim LastDay As Date


Application.Workbooks("Back Office 2019.xlsx").Activate

Sheets("trades").Select
LastDayRow = Range("L" & Rows.Count).End(xlUp).Row
telos = Cells(LastDayRow, 12)
arxi = InputBox("Please enter the row for the start of the week")
vdomada = LastDayRow - arxi
ReDim b(vdomada) As Variant
For i = 1 To vdomada

b(i) = ThisWorkbook.Sheets("trades").Range("AA & arxi +i-1:AD& arxi+i-1").Value
Next i

End Sub

Ответы [ 3 ]

1 голос
/ 17 июня 2019
With ThisWorkbook.Sheets("UST trades")
    b(i) = .Range(.Cells(arxi + i - 1, "AA"), .Cells(arxi + i - 1, "AD")).Value
End With
1 голос
/ 17 июня 2019

Мало что может помочь. Я бы удалил следующее -

ReDim b(vdomada) As Variant
For i = 1 To vdomada

b(i) = ThisWorkbook.Sheets("trades").Range("AA & arxi +i-1:AD& arxi+i-1").Value
Next i

И заменить его на -

b = ThisWorkbook.Sheets("trades").Range("AA" & arxi & ":AD" & vdomada).Value

Посмотрите, поможет ли это.

Я думаю, что ваша ошибка происходит от предоставления Range чего-то, с чем он не знает, что делать, и от попытки присвоить 2D диапазон массиву, который был определен как 1D. Я не думаю, что вам нужно переопределить массив в этом случае.

Удачи.

0 голосов
/ 17 июня 2019

Как избежать .Activate

With Workbooks("Back Office 2019.xlsx").Sheets("trades")
    LastDayRow = .Range("L" & Rows.Count).End(xlUp).Row
    telos = .Cells(LastDayRow, 12)
    arxi = InputBox("Please enter the row for the start of the week")
    vdomada = LastDayRow - arxi
End With

Кроме того, переменные, которые принимают целые числа (НЕ десятичные), лучше объявить As Long. Longs может принимать большее большее число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...