在每个工作表中循环查找数据并将其返回到特定工作表(如果存在)

对于我创build的背景是一个跟踪项目的工作手册。 现在我的工作簿里有3个项目,但是这个数字会超过50个,并且还在增长。 每个工作表都包含项目信息项目信息工作表 。 我有的代码现在不工作。 这张照片显示了我希望它提供给所有项目页面的所有项目页面。 我想要的代码是通过读取每个工作表,如果$ A $ 5 =“Project#:”是真的,那么它将从指定的单元格复制到所有项目页面。 然后进入下一张表格,并执行相同的操作,如果其值为真,则将值放在最后一行的下一行。

我想我所说的是有点不清楚,这里是我目前使用的代码来获取我想要的和在照片中的“所有项目”页面上的输出:

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”'In-service Success

是否有一种方法可以编写某种循环遍历每张工作表,从“工程信息”工作表中获取指定的数据,并将其移至“所有工程”工作表,并为每个新工作表分配一个新行。 每个项目工作表在同一单元格位置包含相同的信息。

这应该做的工作。

 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