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

时间:2014-01-28 22:00:33

标签: excel vba excel-vba

我正在编写一个宏来复制工作表并将其添加到工作簿中的特定位置。此宏将用于具有不同页数的工作簿,因此我希望它继续复制和添加工作表,直到不再有工作表为止。

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

宏显然从3运行到工作表总数,但由于工作表总数在每个步骤后发生变化(由于复制/添加工作表),宏在到达工作簿末尾之前停止(我猜是因为它在计数器达到sheets.count的起始值时停止运行。关于如何使宏继续到最后的任何建议? 这是我第一次编写代码的经历,所以请保持温和:)

1 个答案:

答案 0 :(得分:4)

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

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

希望这会有所帮助。 ;)