2017-02-16 3 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

Если ошибка действительно в 'Для Each' и не раньше, трудно понять причину ошибки от куска кода вы показали, до тех пор, пока вы не использовать параметр' Explicit' , Первым шагом для сужения поиска является установка этой опции и 'Dim' ваши переменные, мы надеемся, что что-то не так будет замечено. Кроме того, проверьте свой лист '' Sorted Results '', есть ли у него несколько ячеек с' Data Validation'? –

+0

Позвольте мне попробовать запустить его –

ответ

0

Я не получил сообщение об ошибке при запуске вашего кода. Поймите, хотя я прокомментировал два вызова, потому что у меня нет этих подпрограмм.

Call ClearSortedResultsSheet 
Call PrintSortedResultsHeaders 

И я также получал все результаты на строке 2 Таблиц («Отсортированные результаты») лист. Поэтому я добавил строку y = y + 1, чтобы записать их в отдельные строки.

Кроме этого, я бы искал любые изменения, которые могут быть сделаны ClearSortedResultsSheet или PrintSortedResultsHeaders, чтобы вызвать ошибку. Возможно, они изменили активный лист или что-то в этом роде.

Вот ваш код, который отлично работал на моем компьютере только с добавлением оператора dim и 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 был просто догадкой. –

Смежные вопросы