2016-01-07 108 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 

如果它真的有效選擇此片的情況下,那麼它應該有這方面的工作。