Я очень ценю любую помощь, которую я могу получить.Excel VBA - ошибка времени выполнения «9», подзаголовок вне допустимого диапазона
Я пытаюсь пройти через столбец, ищущий повторяющиеся имена, затем беря это и несколько других данных из одной строки и помещая их в 2D-массив, который я хочу использовать другой функцией, но он не работает.
Мне очень нужна ваша помощь в выяснении, почему я не могу переделать этот массив без сохранения данных.
Dim oRange As Range, aCell As Range, bCell As Range
Dim ws As Worksheet
Dim SearchString As String, FoundAt As String
Dim tArray() As Variant
Dim iR As Long
Dim LastRow As Long
Dim LastCol As Long
'name of the worksheet
Set ws = Worksheets("VML Daily")
'column 6 has a huge list of names
Set oRange = ws.Columns(6)
'the keyword (there are 7 'ABC Company 1' in the column above)
SearchString = "ABC Company 1"
'Find keyword in column
Set aCell = oRange.Find(What:=SearchString, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
'find last row and column number
LastRow = Range("A1").End(xlDown).Row
'redimensioning based on maximum rows
ReDim Preserve tArray(1 To LastRow, 1 To 3) As Variant
'if search finds something
If Not aCell Is Nothing Then
Set bCell = aCell
FoundAt = aCell.Address
iR = 1
tArray(1, 1) = aCell
tArray(1, 2) = aCell.Offset(0, 33)
tArray(1, 3) = aCell.Offset(0, 38)
'continue finding stuff until end
Do
Set aCell = oRange.FindNext(After:=aCell)
If Not aCell Is Nothing Then
If aCell.Address = bCell.Address Then Exit Do
FoundAt = FoundAt & ", " & aCell.Address
tArray(iR, 1) = aCell
tArray(iR, 2) = aCell.Offset(0, 33)
tArray(iR, 3) = aCell.Offset(0, 38)
iR = iR + 1
Else
Exit Do
End If
Loop
'redim'ing the array to the amount of hits I found above and preserve the data
'Here's where it error's out as "Subscript out of range"
ReDim Preserve tArray(1 To iR, 1 To 3) As Variant
Else
MsgBox SearchString & " not Found"
Exit Sub
End If
А, так что в принципе нет возможности изменить последнее измерение, и ему придется каждый раз увеличивать его. Я определенно использую неправильную концепцию для добавления значений в массив. Есть ли способ использовать динамический массив? Я просто хочу иметь возможность добавлять значения в массив до тех пор, пока это не будет выполнено, а затем закроет его, когда это необходимо. –
На основе вашего кода вы должны быть в порядке, если вы измените свой первый элемент на тот, который не изменяется. Я обновлю, чтобы отразить это ... –
Это сработало отлично. Большое спасибо! –