Сбой .List(i, 0) = ...
произойдет, если значение o + 1
будет больше, чем количество элементов списка, но это произойдет прямо в 1-м цикле.
В противном случае вы используете i = o + 1
в каждом цикле, поэтому значение i
не меняется, поэтому вы продолжаете перезаписывать один и тот же элемент в списке. Таким образом, количество элементов списка увеличивается в каждом цикле, но вы можете видеть только последнее значение в 1-й позиции (я предполагаю, что значение o
равно 0).
Другие предложения:
Вы можете упростить инициацию .Find
следующим образом:
AGCN = Rows("1:1").Find(what:="ID CODE", lookat:=xlWhole).Column
With Sheet1.Columns(AGCN)
Set c = .Find(tbAC, LookIn:=xlValues, LookAt:=xlPart) ' you can omit "*" by using xlPart
...
Вы можете адресовать 2-й, 3-й и т. Д. Столбцы в списке, считая его «массивом» на основе 0:
.List(i, 1) = "Something" ' will put "Something" to column 2
.List(i, 2) = "Anything" ' will put "Anything" to column 3
Вам не нужно повторять установку .ColumnCount
и .ColumnWidths
в каждом цикле.