首页 文章

复制并粘贴错误:'1004'

提问于
浏览
0

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

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

  • Sheet1(员工库存)

  • Sheet2(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窗口中并且我打开了Excel电子表格并打开了Sheet1(员工清单)选项卡,当我单击运行Sub时,我收到以下错误:运行时错误'1004':应用程序定义的或对象定义的错误 . 当我点击“PB”标签时,没有任何东西被复制并粘贴在那里 .

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

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

2 回答

  • 0

    当使用 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
    

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

相关问题