【发布时间】:2014-02-04 03:26:01
【问题描述】:
全部,
我在一个工作簿中设置了一个表格,其中包含我将结果提取到包含 11 个工作表的单独工作簿中的公式。所有 11 个工作表都是相同的,而不是为每个工作表编写单独的代码,我想看看是否有一种简单的方法可以遍历工作表并获取正确的数据。每个工作表都有一个特定的数据行(即 Worksheet1 将具有 B3:Y3。Worksheet2 将具有 B4:Y4 等等。)对于这个新手来说,任何帮助将不胜感激。我用“'”来显示我的尝试。
这是我当前的代码,非常适用于工作表 1,而不适用于其他 10..
Sub Button1_Click()
'Dim wkSheet As WorkSheet
SpendYTD = Sheets("Sheet1").Range("B3:B14")
CCO = Sheets("Sheet1").Range("C3:C14")
CustComp = Sheets("Sheet1").Range("D3:D14")
WorkError = Sheets("Sheet1").Range("E3:E14")
'Cont_Change_%_Actual = Sheets("Sheet1").Range("F3:F14")
'Cont_Change_%_Target= Sheets("Sheet1").Range("G3:G14")
Forecast_Actual = Sheets("Sheet1").Range("H3:H14")
Forecast_Target = Sheets("Sheet1").Range("I3:I14")
Attainment_Actual = Sheets("Sheet1").Range("J3:J14")
Attainment_Target = Sheets("Sheet1").Range("K3:K14")
Planned_Outage_Actual = Sheets("Sheet1").Range("L3:L14")
Planned_Outage_Target = Sheets("Sheet1").Range("M3:M14")
WorkProc_Error_Actual = Sheets("Sheet1").Range("N3:N14")
WorkProc_Error_Target = Sheets("Sheet1").Range("O3:O14")
NumWork_Error_Actual = Sheets("Sheet1").Range("P3:P14")
NumWork_Error_Target = Sheets("Sheet1").Range("Q3:Q14")
Control_Wires_Actual = Sheets("Sheet1").Range("R3:R14")
Control_Wires_Target = Sheets("Sheet1").Range("S3:S14")
'Quarterly Findings
Quality_Actual = Sheets("Sheet1").Range("T3:T14")
Quality_Target = Sheets("Sheet1").Range("U3:T15")
Ease_Bus_Actual = Sheets("Sheet1").Range("V3:V14")
Ease_Bus_Target = Sheets("Sheet1").Range("W3:W14")
Cust_Comp_Actual = Sheets("Sheet1").Range("X3:X14")
Cust_Comp_Target = Sheets("Sheet1").Range("Y3:Y14")
Workbooks.Open Filename:= _
"Macintosh HD:Users:BG:Desktop:Scorecard.xlsx"
ActiveWorkbook.Sheets("BRb").Activate
' For Each WorkSheet In ActiveWorkbook.Sheets
ActiveSheet.Range("B6") = SpendYTD
ActiveSheet.Range("B7") = CCO
ActiveSheet.Range("F6") = CustComp
ActiveSheet.Range("F7") = WorkError
'ActiveSheet.Range("E10") = Cont_Change_%_Actual
'ActiveSheet.Range("F10") = Cont_Change_%_Target
ActiveSheet.Range("E11") = Forecast_Actual
ActiveSheet.Range("F11") = Forecast_Target
ActiveSheet.Range("E12") = Attainment_Actual
ActiveSheet.Range("F12") = Attainment_Target
ActiveSheet.Range("E13") = Planned_Outage_Actual
ActiveSheet.Range("F13") = Planned_Outage_Target
ActiveSheet.Range("E14") = WorkProc_Error_Actual
ActiveSheet.Range("F14") = WorkProc_Error_Target
ActiveSheet.Range("E15") = NumWork_Error_Actual
ActiveSheet.Range("F15") = NumWork_Error_Target
ActiveSheet.Range("E16") = Control_Wires_Actual
ActiveSheet.Range("F16") = Control_Wires_Target
'Quarterly Results
ActiveSheet.Range("E20") = Quality_Actual
ActiveSheet.Range("F20") = Quality_Target
ActiveSheet.Range("E21") = Ease_Bus_Actual
ActiveSheet.Range("F21") = Ease_Bus_Target
ActiveSheet.Range("E22") = Cust_Comp_Actual
ActiveSheet.Range("F22") = Cust_Comp_Target
ActiveWorkbook.Save
ActiveWorkbook.Close
'MsgBox WorkSheet.Name
'Next
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub
【问题讨论】:
-
i.e Worksheet1 will have B3:Y3. Worksheet2 will have B4:Y4 etc提示:使用 For 循环。Range("B3:Y3")也可以写成.Range("B" & i & ":Y" & i)其中i是一个保存行号的变量... -
真的有用吗?你这样做
Planned_Outage_Actual = Sheets("Sheet1").Range("L3:L14")然后ActiveSheet.Range("E13") = Planned_Outage_Actual即。将多单元格范围转移到单个单元格。您只需要单个值吗? -
我只需要单个值。因此,根据哪个工作表,列不会改变,只会改变行#。 Worksheet1 将从 B3 中提取,Worksheet2 将从 B4 中提取,依此类推。