2017-02-16 92 views
1

我在一張紙上覆制範圍內的數據,將其分配給一個數組,然後遍歷數組並嘗試將數據輸出到另一張紙上。我不斷收到錯誤1004:應用程序定義或對象定義的錯誤。Excel vba錯誤1004試圖將數據數組輸出到工作表

Worksheets("tempSort").Activate 

With Application.Worksheets("tempSort") 
    .Range("A1:B" & EndRowDummy).Sort key1:=Range("B1:B" & EndRowDummy), _ 
    order1:=xlDescending, Header:=xlNo 
End With 

i = 1 
y = i + 1 

Call ClearSortedResultsSheet 
Call PrintSortedResultsHeaders 

For i = 1 To EndRowDummy  
    x = Sheets("tempSort").Range("A" & i).text 
    Worksheets("Sorted Results").Range("A" & y) = x 
    playerData = Sheets(x).Range("C2:F2").Value 
    b = 2 

    For Each data In playerData 
     Worksheets("Sorted Results").Cells(y, b) = data 
     b = b + 1 
    Next data 
Next i 

它在For Each循環中拋出錯誤。

+0

如果錯誤確實存在於For Each中,而不是之前很難從您顯示的代碼片段中看到錯誤的原因,只要您不使用Option Explicit 。縮小搜索範圍的第一步是設置這個選項並且「昏暗」你的變量,希望發現錯誤。另外,請檢查你的「Sorted Results」工作表,它是否有一些單元格帶有「Data Validation」? –

+0

讓我試着先運行它 –

回答

0

我在運行代碼時沒有收到錯誤消息。儘管我明白了這兩個調用,因爲我沒有這些子程序。

Call ClearSortedResultsSheet 
Call PrintSortedResultsHeaders 

而且我還得到了工作表第2行(「分類結果」)表中的所有結果。所以我添加了一個y = y + 1行來將它們寫在單獨的行上。

除此之外,我會搜索ClearSortedResultsSheet或PrintSortedResultsHeaders可能導致錯誤的任何更改。也許他們改變了活動表或其他東西。

這裏是你的代碼,在我的電腦上工作正常,只有一個添加暗淡和y = y + 1語句。

Sub test() 
Dim playerData() As Variant 

     Worksheets("tempSort").Activate ' copy this and place it below the subroutine calls 
     EndRowDummy = 3 

     With Application.Worksheets("tempSort") 
      .Range("A1:B" & EndRowDummy).Sort key1:=Range("B1:B" & EndRowDummy), _ 
      order1:=xlDescending, Header:=xlNo 
     End With 

     i = 1 
     y = i + 1 


     'Call ClearSortedResultsSheet 
     'Call PrintSortedResultsHeaders 
     Worksheets("tempSort").Activate ' in case the subroutine changed the activesheet 
     For i = 1 To EndRowDummy 
      x = Sheets("tempSort").Range("A" & i).Text 
      Worksheets("Sorted Results").Range("A" & y) = x 
      abc = Sheets(x).Range("C2").Value 
      playerData = Sheets(x).Range("C2:F2").Value 
     ' abc = playerData(1) 
      b = 2 

      For Each Data In playerData 
       Worksheets("Sorted Results").Cells(y, b) = Data 
       b = b + 1 
      Next Data 
      y = y + 1 
     Next i 


End Sub 
+0

我原來的y = y + 1。我發佈的代碼是一個片段,我沒有正確複製/粘貼。我不想發佈整個代碼,因爲它很長。 您提到工作表(「tempSort」)。激活。它應該重要的是什麼活動表是這個代碼運行乾淨? –

+0

與您的代碼無關,因爲您對命名工作表很不錯。我將工作表重新命名爲與您的工作表相同,就像我說的,上面的代碼完美地運行,沒有調用其他兩個子例程。我沒有得到錯誤。我只是在暗示這兩個子例程中的某一個會導致錯誤,因爲我沒有運行子例程並且沒有得到該錯誤。 Activesheet只是一個猜測。 –