我试图让一组单元格复制和粘贴,这取决于使用VBA输入到单元格中的数字。
我想知道,如果你能告诉我为什么我得到的错误,我是?
我得到的是
运行时错误'1004': 应用程序定义或对象定义的错误
先谢谢你
Sub layercopypaste()
Dim rng As Range
Set rng = Application.Range(Cell1:="[L5:M9")
If ("M4") = 2 Then
Range("L5:M9").Copy Range("L9")
ElseIf ("M4") = 3 Then
Range("L5:M9").Copy Range("L9:L13")
ElseIf ("M4") = 4 Then
Range("L5:M9").Copy Range("L9, L13, L17")
Else
Range("L5:M9").Copy Range("L9, L14, L19, L21")
End If
End Sub
这里有几个问题。
首先,你应该使用显式引用,所以要声明你的工作表。
其次,你从来没有真正使用你设置的变量范围。这也不是正确的语法。Set rng = Application.Range(Cell1:="[L5:M9")
移除 Cell1
,它是一个命名的参数,但这不是正确的用法。你还有一个单括号,你不要任何括号。你也不需要应用。
第三,你需要在所有的范围前加上range。("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