复制并粘贴错误:' 1004'

时间:2016-01-07 02:00:45

标签: excel vba excel-vba

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

我创建了一个包含2张的工作簿,

  1. Sheet1(员工库存)
  2. Sheet 2中(PB)
  3. 我的代码已编写并保存在本工作簿中。

    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窗口中时,我打开了Excel电子表格并打开了Sheet1(员工库存)选项卡,当我单击Run Sub时,出现以下错误:运行时错误' 1004':应用程序定义或对象定义的错误。当我点击" PB"选项卡,没有任何东西被复制和粘贴在那里。

    然而,当我点击PB标签然后我点击Run Sub时,代码会执行,任何行包含第一个单词" PB"将被复制并粘贴在" PB"标签。

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

2 个答案:

答案 0 :(得分:2)

使用range.select时必须选择其父工作表,因此我们可以使用PB.Activate或根本不使用.select

尝试替换它:

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

这一行:

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

答案 1 :(得分:0)

为什么不在代码的开头选择第二张?

尝试以下

ActiveWorkbook.Sheets("Sheet2").Activate

如果在选择此工作表时它确实有效,那么它应该可以使用它。

相关问题