2017-02-16 26 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只是一个猜测。 –

相关问题