需要在多个工作表中运行Do While循环

我一直试图在工作簿中的多个工作表中运行相同的Do While循环函数,并在另一个工作表中编译数据。 该代码适用于指定的一个工作表,但是如何让它在同一时间在工作簿中的其他工作表上工作? 另外值得一提的是,我只希望它在一些工作表上运行,而不是工作簿中的所有工作表(工作表被命名为年 – 2014年,2015年等)。

这是代码

Sub Total_Button1_Click()

昏暗我作为整数

昏暗strSheetFrom作为string

Dim j As Integer Dim strSheetTo As String i = 3 j = 2 strSheetFrom = "2014" strSheetTo = "Total" Do While Trim(Sheets(strSheetTo).Range("B" & CStr(j)).Text) <> "" j = j + 2 Loop Do While Trim(Sheets(strSheetFrom).Range("B" & CStr(i)).Text) <> "" If UCase(Trim(Sheets(strSheetFrom).Range("A" & CStr(i)).Text)) = "Y" Then Sheets(strSheetTo).Range("B" & j & ":G" & j).Value = Sheets(strSheetFrom).Range("B" & i & ":G" & i).Value Sheets(strSheetTo).Range("H" & j & ":I" & j).Value = Sheets(strSheetFrom).Range("I" & i & ":J" & i).Value Sheets(strSheetTo).Range("J" & j & ":J" & j).Value = Sheets(strSheetFrom).Range("L" & i & ":L" & i).Value Sheets(strSheetTo).Range("K" & j & ":K" & j).Value = Sheets(strSheetFrom).Range("Q" & i & ":Q" & i).Value Sheets(strSheetTo).Range("L" & j & ":AH" & j).Value = Sheets(strSheetFrom).Range("s" & i & ":AO" & i).Value j = j + 1 End If i = i + 1 Loop MsgBox "Total book created" 

结束小组

使用For Each并像这样遍历Worksheet集合

 'Variables Dim useWorkSheet As Worksheet Dim totalWorkSheet As Worksheet Dim yearAsNumeric As Integer Dim startingYear As Integer 'Settings startingYear = 2014 'To reference the total worksheet so we can work with it Set totalWorkSheet = ActiveWorkbook.Worksheets("Total") 'Iterate over each item in the collection For Each useWorkSheet In ActiveWorkbook.Worksheets 'Force the name into a numeric value. If it starts with anything non numeric (AZ|az|$,#,etc) then it will return 0 yearAsNumeric = Val(useWorkSheet.Name) 'Greater than or equal to the year we want to start with? If yearAsNumeric >= startingYear Then 'Yes. Do your stuff here useWorkSheet.Name End If Next 

尝试使你的strSheetFromvariables的数组像这样:

 strSheetFrom = new strSheetFrom[3] strSheetFrom[2] = "2012" strSheetFrom[1] = "2013" strSheetFrom[0] = "2014" 

然后把你的代码放到另一个循环中,像这样:

 dim w as integer for w = 0 To 3 Do While Trim(Sheets(strSheetTo).Range("B" & CStr(j)).Text) <> "" j = j + 2 Loop Do While Trim(Sheets(strSheetFrom[w]).Range("B" & CStr(i)).Text) <> "" If UCase(Trim(Sheets(strSheetFrom[w]).Range("A" & CStr(i)).Text)) = "Y" Then Sheets(strSheetTo).Range("B" & j & ":G" & j).Value = Sheets(strSheetFrom[w]).Range("B" & i & ":G" & i).Value Sheets(strSheetTo).Range("H" & j & ":I" & j).Value = Sheets(strSheetFrom[w]).Range("I" & i & ":J" & i).Value Sheets(strSheetTo).Range("J" & j & ":J" & j).Value = Sheets(strSheetFrom[w]).Range("L" & i & ":L" & i).Value Sheets(strSheetTo).Range("K" & j & ":K" & j).Value = Sheets(strSheetFrom[w]).Range("Q" & i & ":Q" & i).Value Sheets(strSheetTo).Range("L" & j & ":AH" & j).Value = Sheets(strSheetFrom[w]).Range("s" & i & ":AO" & i).Value j = j + 1 End If i = i + 1 Loop w -= 1 next 

我没有testing过,但类似的东西。 你明白了。