Страницы: 1
RSS
Не работает ReDim Preserve., По какой-то причине не работает ReDim Preserve для массива.
 
Здравствуйте. Задача удалить из массива ненужные строки, которые помечены в столбце "-1000". Для этого создаётся другой динамический массив  arrayBrendFinal. Строки старого массива перебираются циклом. Если пометка "-1000" не определяется, то переопределяется размерность нового массива и в него вставляется строка из старого массива. Каждая последующая уникальная строка (без "-1000") из старого массива вставляется в новый массив ниже предыдущей уникальной. Почему-то новый массив не хочет 2-ой раз переопределять размерность с сохранением данных.
Заранее большое спасибо, если подскажите, что я не учёл или где ошибся.
Код
'B. Заносим уникальные аптеки в новый массив без заголовков. Заносим только уникальные аптеки. Повторяющиеся не заносим.

Sub DaletingSpareRows(ByVal arrayBrend As Variant, ByVal ColNumbIdPharmacyInArrayOrigin As Integer)

    Dim ByRef arrayBrendFinal as Variant
    Dim RowNum As Long, RowNum1 As Long, RowNumInsertToCurent As Long, RowNumInsertToPrevious As Long
    Dim ColNum As Integer
    Dim lngIdPharmacy As Long, lngIdPharmacy1 As Long
    Dim lngIDCurent As Long
    Dim lngEndRowForArrBrendFinal As Long
    Dim n As Long
    Dim lngStartRow As Long, lngEndRow As Long, intStartCol As Integer, intEndCol As Integer
        
        lngStartRow = LBound(arrayBrend, 1) + 1 '+1 это чтобы без заголовков.
        lngEndRow = lngStartRow
        intStartCol = LBound(arrayBrend, 2)
        intEndCol = UBound(arrayBrend, 2)
        
                    n = 0
        For RowNum = LBound(arrayBrend, 1) + 1 To UBound(arrayBrend, 1) ' Перебираем строки старого массива
            
            lngIdPharmacy = arrayBrend(RowNum, ColNumbIdPharmacyInArrayOrigin)
            Select Case lngIdPharmacy
                Case Is <> -1000 'Так помечены повторяющиеся аптеки в столбце ID.
                    'Переопределяем размер нового массива. Размер равен 1 строке.
                    lngEndRowForArrBrendFinal = lngStartRow + n
 

                   

Вот здесь возникает ошибка. Изначально динамический массив пустой. В первую итерацию цикла данный массив переопределяется = 1 строке. 
А вот при попытке увеличить его ещё в следующую итерацию, возникает ошибка.

ReDim Preserve arrayBrendFinal(lngStartRow To lngEndRowForArrBrendFinal, intStartCol To intEndCol)



                    
                        For ColNum = LBound(arrayBrend, 2) To UBound(arrayBrend, 2) Step 1 'Копируем строку из старого массива в новый.
                            arrayBrendFinal(lngEndRowForArrBrendFinal, ColNum) = arrayBrend(RowNum, ColNum)
                        Next ColNum
                    n = n + 1
            End Select
            
        Next RowNum
 
Ошибка "... out of range".
 
Справку читали?
https://docs.microsoft.com/ru-ru/office/vba/language/reference/user-interface-help/redim-statement
Скажи мне, кудесник, любимец ба’гов...
 
Через ReDim Preserve допускается изменить только последнюю размерность. Т.е. Вы можете переопределить intEndCol, но никак не lngEndRowForArrBrendFinal.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх