添加工作表时更新sheets.count值

我写一个macros来复制工作表并将其添加到工作簿中的特定位置。 此macros将用于具有不同数量的工作表的工作簿,所以我希望它可以继续复制并添加工作表,直到没有剩余工作表为止。

Sub Macro() Dim x As Integer For x = 3 To Sheets.Count Step 3 Sheets(x).Select Sheets(x).Copy Before:=Sheets(x + 3) A bunch more code... Next 

macros显然从3运行到工作表总数,但由于工作表总数在每一步之后发生变化(由于复制/添加工作表),所以macros在工作簿结束之前停止(我猜测是因为当计数器达到sheets.count的起始值时它停止运行)。 有关如何使macros观继续到底的任何build议? 这是我第一次写代码的经验,所以请温柔:)

假设您想要添加x表,以便达到工作表数量y 。 但是,您希望在工作簿中最后一个名为End的工作簿之前创build所有这些工作表。 一种方法如下:

 Sub AddMoreSheets() ShCount = ThisWorkbook.Sheets.Count TargetCount = 7 SheetsToAdd = TargetCount - ShCount Do Until SheetsToAdd = 0 ThisWorkbook.Sheets.Add Before:=ThisWorkbook.Sheets("End") SheetsToAdd = SheetsToAdd - 1 Loop End Sub 

但是,如果你不能确定最后一张纸的名字是否End ? 一种方法如下:

 Sub AddMoreSheets2() ShCount = ThisWorkbook.Sheets.Count TargetCount = 7 SheetsToAdd = TargetCount - ShCount Do Until SheetsToAdd = 0 ThisWorkbook.Sheets.Add Before:=ThisWorkbook.Sheets(Sheets.Count) SheetsToAdd = SheetsToAdd - 1 Loop End Sub 

但是,由于某种原因,你真的想为此使用For Loop 。 这里有一个问题:你想根据一个名为Start的表格来命名它们。 以下是一种方法:

 Sub AddMoreSheets3() Dim ListOfNames As Variant, ShName As Variant ListOfNames = Sheets("Start").Range("A1:A5").Value 'Modify accordingly. For Each ShName In ListOfNames Set NewSht = ThisWorkbook.Sheets.Add(Before:=Sheets(Sheets.Count)) NewSht.Name = ShName Next ShName End Sub 

希望这可以帮助。 ;)