如何定义工作簿工作表和条件复制粘贴函数

问题描述 投票:0回答:1

我试图让一组单元格复制和粘贴,这取决于使用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
excel vba copy-paste
1个回答
0
投票

这里有几个问题。

首先,你应该使用显式引用,所以要声明你的工作表。

其次,你从来没有真正使用你设置的变量范围。这也不是正确的语法。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
© www.soinside.com 2019 - 2024. All rights reserved.