Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA在多个工作表中运行循环_Vba_Excel - Fatal编程技术网

使用VBA在多个工作表中运行循环

使用VBA在多个工作表中运行循环,vba,excel,Vba,Excel,全部, 我在一个包含公式的工作簿中设置了一个表格,我正在将结果提取到一个包含11个工作表的单独工作簿中。所有11个工作表都是相同的,与为每个工作表编写单独的代码不同,我想看看是否有一种简单的方法来循环工作表并获取正确的数据。每个工作表都有一行特定的数据(即工作表1将有B3:Y3。工作表2将有B4:Y4等)。对于这个新手,任何帮助都将不胜感激。我用“'”来表示我的尝试 下面是我当前的代码,它非常适合工作表1,而不是其他10 Sub Button1_Click() 'Dim wkSheet As

全部,

我在一个包含公式的工作簿中设置了一个表格,我正在将结果提取到一个包含11个工作表的单独工作簿中。所有11个工作表都是相同的,与为每个工作表编写单独的代码不同,我想看看是否有一种简单的方法来循环工作表并获取正确的数据。每个工作表都有一行特定的数据(即工作表1将有B3:Y3。工作表2将有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

可以对工作表使用对象变量,如

dim ws as worksheet
set ws = thisworkbook.sheets("sheet1")
可以使用for each循环遍历工作簿中的所有工作表

dim ws as worksheet
for each ws in thisworkbook.worksheets
    ws.dowork
next ws

所有活动工作表和/或工作表(“sheet1”)都可以替换为ws变量。

即工作表1将具有B3:Y3。工作表2将有B4:Y4等
提示:使用For循环
Range(“B3:Y3”)
也可以写成
。Range(“B”&i&“:Y”&i)
其中
i
是一个保存行号的变量……这真的有效吗?您正在这样做
Planned\u discount\u Actual=Sheets(“Sheet1”).Range(“L3:L14”)
,然后
ActiveSheet.Range(“E13”)=Planned\u discount\u Actual
,即将多小区范围传输到单个小区。你只需要一个值吗?我只需要一个值。因此,根据工作表的不同,列不会改变,只会改变行。工作表1将从B3中提取,工作表2将从B4中提取,依此类推。如果要对每个…循环使用
,则不能初始化
ws
变量。此外,您在此工作簿中的每个ws的行
是错误的,此工作簿中的每个ws的行应该是
。工作表
这对问题没有任何作用。它显示了如何循环浏览工作表,但没有显示如何从每个特定工作表的不同范围获取数据。他仍然会在每张纸上硬编码该做什么,这违背了它的目的。