Ошибка времени выполнения 9 "индекс вне диапазона" массив redim preserve vba - PullRequest
0 голосов
/ 18 января 2019

мой код копирует все значения таблицы в excel в массив, фильтрует их и заполняет им комбинированный список, но я продолжаю получать эту ошибку в своем коде, и после отладки кажется, что ошибка произошла из-за Redim Preserve. .. можешь проверить, пожалуйста?

' FIll CB2()

 Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("D1") 
 Dim LC As Long 
 Dim i As Long 
 Dim PN As Long 
 Dim myArray() As String 
 Dim j As Long 
 Dim k As Long 
 Dim temp As String

LC = ws.Cells(ws.Rows.Count, 4).End(xlUp).Row

    For i = 1 To LC

        If StrComp(CB1.List(CB1.ListIndex, 0), ws.Cells(i, 4), vbTextCompare) = 0 Then



        'Set you array with the right dimension
        ReDim Preserve myArray(0 To PN, 0 To 1)

        myArray(PN, 0) = ws.Cells(i, 2)
        myArray(PN, 1) = ws.Cells(i, 3)

        PN = PN + 1


        End If

    Next i 
End Sub

1 Ответ

0 голосов
/ 18 января 2019

Нет ничего для сохранения, когда оператор Redim вызывается впервые в вашем цикле. Вызывайте Redim без "Preserve" при первом измерении массива.

Если строка кода, содержащая переменные измерений, является реальным кодом, удивительно, что она не вызывает ошибку. Я предлагаю размещать каждый оператор Dim в отдельной строке для лучшей читабельности кода, если не по какой-либо другой причине, и избегать использования двоеточия в целом, но особенно с целью смешивания объявлений с присвоением значения.

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