В вашем коде есть несколько вещей, о которых вы должны знать: 1) Вы отключаете обновление экрана, но никогда не включаете его снова.Я рекомендую оставить его включенным до тех пор, пока ваш код не заработает, чтобы вы могли видеть, что происходит.2) Лучше всего объявить ваши переменные.Mrow, Mcolumn, i и j должны быть объявлены как long.3) Старайтесь не использовать Select
как можно больше.Вы становитесь зависимыми от своего местоположения курсора, и это обычно заканчивается неэффективной работой, поэтому вы получаете ошибку.Вы пытаетесь выбрать Cells(1,1)
, но не объявляете лист, из которого хотите выбрать.Предполагается, что вы хотите выбрать из Sheets(1)
, но вы не можете, потому что вы выбрали Sheets(3)
.4) Сделайте отступ в своем коде.Его легче читать и легче следовать за циклами и инструкциями if / then.
Перезапись существующего кода будет выглядеть следующим образом:
Sub Semi_Open()
Dim mrow As Long
Dim mcolumn As Long
Dim j As Long
Dim i As Long
Sheets(1).Columns(1).Copy Destination:=Sheets(3).Columns(1)
Sheets(1).Rows(1).Copy Destination:=Sheets(3).Rows(1)
mrow = Sheets(3).Cells(Rows.Count, 1).End(xlUp).Row
mcolumn = Sheets(3).Cells(1, Columns.Count).End(xlToLeft).Column
For j = 2 To mcolumn
For i = 2 To mrow
Sheets(3).Cells(i, 2) = Application.WorksheetFunction.VLookup(Sheets(1).Cells(i, 2), Sheets(2).Range("A:MAA"), 2, False)
Next i
Next j
End Sub