Ваша ключевая проблема в том, что эта строка Find
на Листе 2 не соответствует
Set Position = .Columns(7 * y).Find(What:=ID, After:=.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole)
Код повторяется от 0 до 16 (что, вероятно, должно быть от 1 до 16), но ваше разъединение - это столбец, который вы ищете в .Columns(7 * y)
, это переменная , то есть 0, 7, 14 но вы пытаетесь начать поиск в A1
каждый раз с After:=.Cells(1, 1)
. Следовательно, ошибка, поскольку код не может найти столбец G (столбец 7), P (столбец 14) и т. Д., Начиная с A1
Если вы попробуете
Set Position = .Columns(7 * y).Find(What:=ID, After:=.Cells(1, 7 * y), LookIn:=xlValues, LookAt:=xlWhole)
тогда ваш поиск будет внутренне согласованным в том же столбце
Следующим шагом является удаление операторов Select
для более эффективного кода. :)
часть 2)
Как вы обнаружили Postion
без активации листа, вам либо нужно
1) Активировать позицию
2) Избегайте Select
всего
Пойдем с (2)
Попробуйте заменить
Position.Offset(0, 2).Select
Range(Selection, Selection.End(xlRight)).Select
Selection.Copy
Sheets("Sheet1").Range("A2").Offset(i, 2 + 4 * y).Select
ActiveSheet.Paste
с
Range(Position.Offset(0, 2), Position.Offset(0, 2).End(xlToRight)).Copy Sheets("Sheet1").Range("A2").Offset(i, 2 + 4 * y)