2015-07-01 9 views
1

У меня очень слабый опыт работы с VBA, но теперь я столкнулся с проблемой, где это действительно необходимо.Цитирование всех активных рабочих листов

Мне нужно скопировать значение ячейки из нескольких листов (кроме «Сводка») в один рабочий лист, но перед проблемой. При запуске макроса я получаю около 30 строк со значениями, которые мне нужны, но все 30 значений принадлежат одному и тому же листу. Кажется, что цикл работает только около 1 листа. Не могли бы вы помочь мне найти ошибку в коде?

Sub CopyTotalSalesPrice() 

For Each Worksheet In ActiveWorkbook.Worksheets 
If Worksheet.Name <> "Summary" Then 

Worksheet.Cells(Rows.Count, 7).End(xlUp).Select 
End If 
    If Selection.Value > "0" Then 
     Selection.Copy 
     Worksheets("Summary").Cells(Rows.Count, 6).End(xlUp).Offset(2, 0).PasteSpecial (xlPasteValues) 

     Range("D4").Select 
     Selection.Copy 
     Worksheets("Summary").Cells(Rows.Count, 4).End(xlUp).Offset(2, 0).PasteSpecial (xlPasteValues) 

    End If 

Next Worksheet 

Worksheets("Summary").Select 
End Sub 

ответ

0

при использовании клеток (Rows.Count, 7) .END (xlUp) .Select и все остальное, что они относятся к текущему листу. Таким образом, вы либо ставить перед ними Worksheet.Cells (Rows.Count, 7) .END (xlUp) .Select или активировать лист сначала с Worksheet.Activate

или вы можете просто сделать следующим образом:

Sub CopyTotalSalesPrice() 
    For Each Worksheet In ActiveWorkbook.Worksheets 
     With Worksheet 
      If .Name <> "Summary" Then 
       .Cells(Rows.Count, 7).End(xlUp).Copy Destination:=Worksheets("Summary").Cells(Rows.Count, 6).End(xlUp).Offset(2, 0) 
       .Range("D4").Copy Destination:=Worksheets("Summary").Cells(Rows.Count, 4).End(xlUp).Offset(2, 0) 
      End If 
     End With 
    Next Worksheet 
    Worksheets("Summary").Select 
End Sub 
+0

Спасибо вам большое! Tried WorkSheet.Cells, но он допустил ошибку «Select Method or Range Class Failed», но активация рабочего листа сделала именно то, что мне было нужно! :) Хорошего дня! –

+0

отметьте его как правильный ответ, пожалуйста. в любом случае это рабочий лист, а не рабочий лист .... – Gotrekk

0

Попробуйте это:

Sub CopyTotalSalesPrice() 

For Each Worksheet In ActiveWorkbook.Worksheets 
    If Worksheet.Name <> "Summary" Then 
     Worksheet.Select 
     Worksheet.Cells(Worksheet.Rows.Count, 7).End(xlUp).Select 
    End If 
    If Selection.Value > "0" Then 
     Selection.Copy 
     Worksheets("Summary").Cells(Worksheet.Rows.Count, 6).End(xlUp).Offset(2, 0).PasteSpecial (xlPasteValues) 

     Range("D4").Select 
     Selection.Copy 
     Worksheets("Summary").Cells(Worksheet.Rows.Count, 4).End(xlUp).Offset(2, 0).PasteSpecial (xlPasteValues) 

    End If 

Next Worksheet 

Worksheets("Summary").Select 
End Sub 

я заменил эту Cells(Rows.Count, 7).End(xlUp).Select с Worksheet.Cells(Worksheet.Rows.Count, 7).End(xlUp).Select

+0

Благодарим за отзыв. Поскольку Gotrekk предложил это выше, я решил просто скопировать код, но я все равно получаю «Select Method или Range Class Failed». У вас есть идея, почему эта проблема может возникнуть? Поскольку вы оба предложили этот вариант, это определенно что-то не так с моей стороны ?! –

+0

отредактируйте ваш вопрос с помощью нового кода ... мы посмотрим – Gotrekk

+0

изменил его на Рабочий лист. –

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