Здесь есть несколько неправильных вещей.
Во-первых, вы должны использовать явные ссылки, поэтому объявите свои рабочие листы.
Во-вторых, вы фактически никогда не используете диапазон, установленный для переменной , Это также не правильный синтаксис. Set rng = Application.Range(Cell1:="[L5:M9")
Удалить Cell1
, это именованный аргумент, но это неправильное использование. У вас также есть одна скобка, вы не хотите ни одной. Вам также не нужно приложение.
В-третьих, вам нужен диапазон перед всеми вашими диапазонами. ("M4")
выдаст синтаксическую ошибку.
Четвёртый в этой ситуации Range("L5:M9").Copy Range("L9")
и Range("L5:M9").Copy Range("L9:L13")
сделают то же самое, так как диапазон копирования больше указанных целевых диапазонов.
В-пятых, я предполагаю, что вы хотите вставить в несколько диапазонов эту строку Range("L5:M9").Copy Range("L9, L13, L17")
, которая вызовет синтаксическую ошибку, которая не является правильным диапазоном. Вам нужно использовать Union
, чтобы сделать это. Хотя вы также получите сообщение об ошибке, поскольку целевой диапазон перекрывает диапазон копирования.
Наконец, это, вероятно, должно быть Select Case
, а не If
.
Sub layercopypaste()
Dim myworkbook As Workbook
Dim mysheet As Worksheet
Set myworkbook = ThisWorkbook
Set mysheet = myworkbook.Sheets("Sheet1") 'Or whatever your sheet name is
With mysheet
Dim rng As Range
Set rng = .Range("L5:M9")
Select Case .Range("M4").Value
Case 2, 3
rng.Copy .Range("L9")
Case 4
rng.Copy Union(.Range("L11"), .Range("L17"), .Range("L23"))
Case Else
rng.Copy Union(.Range("L11"), .Range("L17"), .Range("L23"), .Range("L29"))
End Select
End With
End Sub