【问题标题】:Copy and Paste Error : '1004'复制和粘贴错误:'1004'
【发布时间】:2016-01-07 02:00:45
【问题描述】:

我正在使用 VBA 来帮助管理一组数据。我将拥有 50 个月的月度数据,我希望根据单元格中的第一个单词将其分类到不同的工作表中。这是我到目前为止所做的;

我创建了一个有 2 张工作表的工作簿,

  1. Sheet1(员工库存)
  2. 表 2(PB)

我的代码已编写并保存在此工作簿中。

Sub myCode()
    Dim OldString As String
    Dim NewString As String
    Set i = Sheets("Employee Inventory")
    Set PB = Sheets("PB")
    Dim counterPB
    counterPB = 2
    Dim d
    Dim j
    d = 1
    j = 2
    Do Until IsEmpty(i.Range("D" & j))
        OldString = i.Range("D" & j)
        NewString = Left(OldString, 2)
        If NewString = "PB" Then
            i.Rows(j).EntireRow.Copy
            PB.Range("A" & counterPB).Select
            PB.Paste
            counterPB = counterPB + 1
        End If
        j = j + 1
    Loop
End Sub

为代码道歉,因为它看起来很奇怪。此代码查看 Sheet1 并扫描列“D”并查找以“PB”开头的第一个单词。一旦找到它,它会将整行复制并粘贴到另一个名为 Sheet2(PB) 的工作表中。

当我在 Microsoft Visual Basic 窗口中并且打开了带有 Sheet1(Employee Inventory) 选项卡的 Excel 电子表格时,当我单击 Run Sub 时,我收到以下错误:运行时错误“1004”:应用程序定义或对象-定义的错误。当我单击“PB”选项卡时,没有任何内容被复制和粘贴在那里。

但是,当我单击 PB 选项卡,然后单击 Run Sub 时,代码会执行,并且包含第一个单词“PB”的任何行都将被复制并粘贴到“PB”选项卡中。

我的问题是,为什么它只在我打开 Sheet2 时才起作用,而在我打开 Sheet1 时不起作用?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    当使用range.select时必须选择它的父工作表,所以我们可以使用PB.Activate或者根本不使用.select

    尝试替换这个:

    i.Rows(j).EntireRow.Copy
    PB.Range("A" & counterPB).Select
    PB.Paste
    

    用这一行:

    i.Rows(j).Copy PB.Rows(counterPB)
    

    【讨论】:

      【解决方案2】:

      为什么不直接选择代码开头的第二张表?

      试试下面的

      ActiveWorkbook.Sheets("Sheet2").Activate
      

      如果在选择此工作表时它确实有效,那么它应该与此一起工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-06
        • 1970-01-01
        • 2017-11-28
        • 1970-01-01
        相关资源
        最近更新 更多