2016-07-25 2 views
0

Для фона на том, что я создаю, это книга для отслеживания проектов. Сейчас у меня есть 3 проекта в моей книге, но это число будет старше 50 лет. Каждый лист содержит информацию о проекте Project info Worksheet. Код, который у меня есть, не работает прямо сейчас. На этой картинке показано, что я хочу, чтобы она подавала на All projects page эту страницу всех проектов. То, что я хочу, чтобы код выполнял, читается через каждый лист, и если $ A $ 5 = "Project #:" - true, то он скопирует указанные ячейки с этого листа на страницу всех проектов. Затем переходите к следующему листу и делаете то же самое, и если его значение true снова, значения 1 строки ниже последнего.Цитирование через каждый рабочий лист, ищущий данные и возвращающий его на конкретный лист, если его там

Я предполагаю, что я говорил, было немного непонятно, вот код, который я сейчас использую, чтобы получить выход я хочу, и есть на странице «Все проекты» на фото:

Sub All_Data() 

'Sheet "1" 
Sheet7.Range("A2").Select 
ActiveCell.Formula = "=1!$F$1" 'classifying number 
Sheet7.Range("B2").Select 
ActiveCell.Formula = "=1!$B$5" 'Project # 
Sheet7.Range("C2").Select 
ActiveCell.Formula = "=1!$A$1" 'Project Name 
Sheet7.Range("D2").Select 
ActiveCell.Formula = "=1!$B$8" 'Project Engineer 
Sheet7.Range("E2").Select 
ActiveCell.Formula = "=1!$B$6" 'Maximo Time Charge 
Sheet7.Range("F2").Select 
ActiveCell.Formula = "=1!$E$5" 'Material Forecast due date 
Sheet7.Range("G2").Select 
ActiveCell.Formula = "=1!$E$11" 'Materials Forecast Actual 
Sheet7.Range("H2").Select 
ActiveCell.Formula = "=1!$F$11" 'Forecast success 
Sheet7.Range("I2").Select 
ActiveCell.Formula = "=1!$F$12" 'Non Stores Success 
Sheet7.Range("J2").Select 
ActiveCell.Formula = "=1!$E$6" '30% Due 
Sheet7.Range("K2").Select 
ActiveCell.Formula = "=1!$E$13" '30% actual 
Sheet7.Range("L2").Select 
ActiveCell.Formula = "=1!$F$13" '30% success 
Sheet7.Range("M2").Select 
ActiveCell.Formula = "=1!$E$7" '60% due 
Sheet7.Range("N2").Select 
ActiveCell.Formula = "=1!$E$14" '60% actual 
Sheet7.Range("O2").Select 
ActiveCell.Formula = "=1!$F$14" '60% Success 
Sheet7.Range("P2").Select 
ActiveCell.Formula = "=1!$E$8" '90% due 
Sheet7.Range("Q2").Select 
ActiveCell.Formula = "=1!$E$15" '90% actual 
Sheet7.Range("R2").Select 
ActiveCell.Formula = "=1!$F$15" '90% success 
Sheet7.Range("S2").Select 
ActiveCell.Formula = "=1!$B$11" 'In-service Due 
Sheet7.Range("T2").Select 
ActiveCell.Formula = "=1!$E$16" 'In-service actual 
Sheet7.Range("U2").Select 
ActiveCell.Formula = "=1!$F$16" 'In-service Success 


'Sheet "2" 
Sheet7.Range("A3").Select 
ActiveCell.Formula = "=2!$F$1" 'classifying number 
Sheet7.Range("B3").Select 
ActiveCell.Formula = "=2!$B$5" 'Project # 
Sheet7.Range("C3").Select 
ActiveCell.Formula = "=2!$A$1" 'Project Name 
Sheet7.Range("D3").Select 
ActiveCell.Formula = "=2!$B$8" 'Project Engineer 
Sheet7.Range("E3").Select 
ActiveCell.Formula = "=2!$B$6" 'Maximo Time Charge 
Sheet7.Range("F3").Select 
ActiveCell.Formula = "=2!$E$5" 'Material Forecast due date 
Sheet7.Range("G3").Select 
ActiveCell.Formula = "=2!$E$11" 'Materials Forecast Actual 
Sheet7.Range("H3").Select 
ActiveCell.Formula = "=2!$F$11" 'Forecast success 
Sheet7.Range("I3").Select 
ActiveCell.Formula = "=2!$F$12" 'Non Stores Success 
Sheet7.Range("J3").Select 
ActiveCell.Formula = "=2!$E$6" '30% Due 
Sheet7.Range("K3").Select 
ActiveCell.Formula = "=2!$E$13" '30% actual 
Sheet7.Range("L3").Select 
ActiveCell.Formula = "=2!$F$13" '30% success 
Sheet7.Range("M3").Select 
ActiveCell.Formula = "=2!$E$7" '60% due 
Sheet7.Range("N3").Select 
ActiveCell.Formula = "=2!$E$14" '60% actual 
Sheet7.Range("O3").Select 
ActiveCell.Formula = "=2!$F$14" '60% Success 
Sheet7.Range("P3").Select 
ActiveCell.Formula = "=2!$E$8" '90% due 
Sheet7.Range("Q3").Select 
ActiveCell.Formula = "=2!$E$15" '90% actual 
Sheet7.Range("R3").Select 
ActiveCell.Formula = "=2!$F$15" '90% success 
Sheet7.Range("S3").Select 
ActiveCell.Formula = "=2!$B$11" 'In-service Due 
Sheet7.Range("T3").Select 
ActiveCell.Formula = "=2!$E$16" 'In-service actual 
Sheet7.Range("U3").Select 
ActiveCell.Formula = "=2!$F$16" 'In-service Success 



'Sheet "3" 
Sheet7.Range("A4").Select 
ActiveCell.Formula = "=3!$F$1" 'classifying number 
Sheet7.Range("B4").Select 
ActiveCell.Formula = "=3!$B$5" 'Project # 
Sheet7.Range("C4").Select 
ActiveCell.Formula = "=3!$A$1" 'Project Name 
Sheet7.Range("D4").Select 
ActiveCell.Formula = "=3!$B$8" 'Project Engineer 
Sheet7.Range("E4").Select 
ActiveCell.Formula = "=3!$B$6" 'Maximo Time Charge 
Sheet7.Range("F4").Select 
ActiveCell.Formula = "=3!$E$5" 'Material Forecast due date 
Sheet7.Range("G4").Select 
ActiveCell.Formula = "=3!$E$11" 'Materials Forecast Actual 
Sheet7.Range("H4").Select 
ActiveCell.Formula = "=3!$F$11" 'Forecast success 
Sheet7.Range("I4").Select 
ActiveCell.Formula = "=3!$F$12" 'Non Stores Success 
Sheet7.Range("J4").Select 
ActiveCell.Formula = "=3!$E$6" '30% Due 
Sheet7.Range("K4").Select 
ActiveCell.Formula = "=3!$E$13" '30% actual 
Sheet7.Range("L4").Select 
ActiveCell.Formula = "=3!$F$13" '30% success 
Sheet7.Range("M4").Select 
ActiveCell.Formula = "=3!$E$7" '60% due 
Sheet7.Range("N4").Select 
ActiveCell.Formula = "=3!$E$14" '60% actual 
Sheet7.Range("O4").Select 
ActiveCell.Formula = "=3!$F$14" '60% Success 
Sheet7.Range("P4").Select 
ActiveCell.Formula = "=3!$E$8" '90% due 
Sheet7.Range("Q4").Select 
ActiveCell.Formula = "=3!$E$15" '90% actual 
Sheet7.Range("R4").Select 
ActiveCell.Formula = "=3!$F$15" '90% success 
Sheet7.Range("S4").Select 
ActiveCell.Formula = "=3!$B$11" 'In-service Due 
Sheet7.Range("T4").Select 
ActiveCell.Formula = "=3!$E$16" 'In-service actual 
Sheet7.Range("U4").Select 
ActiveCell.Formula = "=3!$F$16" 'In-service Success 

End Sub 

С помощью этого кода я могу назначить каждое значение правильному месту, но все, что меняется от каждого, это номер листа в формуле, и строка изменяется.

Sheet7.Range ("U4") .Select ActiveCell.Formula = "= 3! $ F $ 16" «В-службе успеха

есть способ я могу написать какую-то цикл, который пройдет через каждый лист, возьмет указанные данные из листов «информация о проекте» и переведет их на лист «все проекты», и каждому новому листу назначается новая строка. Каждый лист проекта содержит одну и ту же информацию в тех же ячейках.

ответ

2

Это должно выполнить эту работу.

Sub allProjdata() 
    Dim ws As Worksheet 
    Dim x As Long 

    With Worksheets("Sheet1") 
     ' Clear previous data on the All projects page 
     .Rows("2:" & Rows.Count).ClearContents 

     For Each ws In ThisWorkbook.Worksheets 
      If ws.Range("A5") = "Project # :" Then 
       x = .Range("A" & Rows.Count).End(xlUp).Offset(1).Row 
       '.Cells(x, "A").Formula = "='" & ws.Name & "'!$F$1" 'classifying number 
       .Cells(x, "A").Value = ws.Name 

       .Cells(x, "B").Formula = "='" & ws.Name & "'!$B$5" 'Project # 
       .Cells(x, "C").Formula = "='" & ws.Name & "'!$A$1" 'Project Name 
       .Cells(x, "D").Formula = "='" & ws.Name & "'!$B$8" 'Project Engineer 
       .Cells(x, "E").Formula = "='" & ws.Name & "'!$B$6" 'Maximo Time Charge 
       .Cells(x, "F").Formula = "='" & ws.Name & "'!$E$5" 'Material Forecast due date 
       .Cells(x, "G").Formula = "='" & ws.Name & "'!$E$11" 'Materials Forecast Actual 
       .Cells(x, "H").Formula = "='" & ws.Name & "'!$F$11" 'Forecast success 
       .Cells(x, "I").Formula = "='" & ws.Name & "'!$F$12" 'Non Stores Success 
       .Cells(x, "J").Formula = "='" & ws.Name & "'!$E$6" '30% Due 
       .Cells(x, "K").Formula = "='" & ws.Name & "'!$E$13" '30% actual 
       .Cells(x, "L").Formula = "='" & ws.Name & "'!$F$13" '30% success 
       .Cells(x, "M").Formula = "='" & ws.Name & "'!$E$7" '60% due 
       .Cells(x, "N").Formula = "='" & ws.Name & "'!$E$14" '60% actual 
       .Cells(x, "O").Formula = "='" & ws.Name & "'!$F$14" '60% Success 
       .Cells(x, "P").Formula = "='" & ws.Name & "'!$E$8" '90% due 
       .Cells(x, "Q").Formula = "='" & ws.Name & "'!$E$15" '90% actual 
       .Cells(x, "R").Formula = "='" & ws.Name & "'!$F$15" '90% success 
       .Cells(x, "S").Formula = "='" & ws.Name & "'!$B$11" 'In-service Due 
       .Cells(x, "T").Formula = "='" & ws.Name & "'!$E$16" 'In-service actual 
       .Cells(x, "U").Formula = "='" & ws.Name & "'!$F$16" 'In-service Success 
      End If 
     Next 

    End With 
End Sub 
+0

Я настроил свой код и вопрос немного, не могли бы вы перечитайте мой вопрос и сэмпл код и посмотреть, если вы видите способ сделать свой код лучше, поэтому он автоматически проходит через листы, и я не нужно скопировать и вставить мой код и изменить лист и строку. Я сделал это для кода выше, но я планирую иметь более 50 проектов и скопировать и вставить их и изменить 2 значения для каждой строки займет некоторое серьезное время. –

+0

В основном вы связываете ячейки с каждым из «Рабочего листа с информацией о проекте» 'для строк на странице« Все проекты ». –

+0

Я обновил свой ответ. Дайте мне знать, как это работает для вас. –

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