2016-01-07 89 views
0

我正在使用VBA来帮助管理一组数据。我将有每月数据50个月,我希望根据单元格中的第一个单词将它分类到不同的工作表中。这是我迄今为止所做的;复制并粘贴错误:'1004'

我创建的工作簿用2片材,

  1. Sheet 1中(员工库存)
  2. Sheet 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窗口并且我有打开Sheet 1(员工库存)选项卡的Excel电子表格和当我单击运行时,我会收到以下错误:运行时错误'1004':应用程序定义或对象定义的错误。当我点击“PB”选项卡时,没有任何内容正在复制和粘贴在那里。然而,当我点击PB选项卡,然后点击Run Sub,代码就会执行,任何包含第一个单词“PB”的行都将被复制并粘贴到“PB”选项卡中。

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

回答

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) 
0

为什么你不选择在代码开头第二片?

请尝试以下

ActiveWorkbook.Sheets("Sheet2").Activate 

如果它真的有效选择此片的情况下,那么它应该有这方面的工作。