如何定义工作簿/工作表和条件复制粘贴功能



我正试图根据使用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

最新更新