Переменная x1
не объявлена. Поэтому это должен быть вариант. Кажется, что [myCar]
подразумевается как имя диапазона. Если это так, возможно, можно было бы присвоить его x1
, если бы его местоположение было известно. Возможно, ваш TextBox находится на рабочем листе, и ссылка на самом деле работает. Возможно x1
пусто с этой точки вперед. Я предлагаю вам проверить.
Затем вы присваиваете «MyCar» свойству RowSource объекта ListBox. Как вы знаете, это свойство содержит строку. Если MyCar
является rangename, он не может быть действительным адресом диапазона. Возможно, что-то вроде Range(MyCar).Address
подойдет. .RowSource = "myCar"
просто назначает слово «MyCar» для RowSource, и это должно дать сбой.
В For i = 1 To UBound(x1, 1)
вы теперь ожидаете, что x1
будет массивом. Возможно x1 = [myCar]
эквивалентно ActiveSheet.Range(MyCar).Value
. Я бы не использовал этот синтаксис, но вы проверили его функциональность выше.
Предполагается, что x1
действительно содержит значения диапазона. назначить их свойству List в ListBox не удастся, если свойство ColumnsCount не установлено. Это не видно из вашего кода. Мы также не можем сказать, равны ли столбцы, доступные в x1, столбцам, доступным в списке, или столбцам, требуемым кодом.
В ListBox есть строки и столбцы. Учитывая, что ваша переменная i считает строки, ваша переменная ii должна считать столбцы (я бы использовал R и C, чтобы помочь мне следить за тем, что я делаю). Затем, с учетом всех строк и столбцов, на что рассчитывает ваша переменная iii?
Итак, совершенно очевидно, что в вашем коде недостаточно контроля над строками и столбцами ListBox. Однако после сортировки вы можете обнаружить, что значения, которые вы хотите присвоить, не существуют. Поэтому строка, которая вылетает из вашей программы, может содержать более одной ошибки.