我正试图根据使用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
,它是一个命名参数,但这不是正确的用法。你也有一个括号,你不想要任何。您也不需要申请。
第三,你需要在所有的射程之前有射程。("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