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

Posted

技术标签:

【中文标题】添加工作表时更新 sheet.count 值【英文标题】:Updating sheets.count value when adding worksheets 【发布时间】:2014-01-28 22:00:32 【问题描述】:

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

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 到工作表总数运行,但由于工作表总数在每一步之后都会发生变化(由于复制/添加工作表),宏在到达工作簿末尾之前停止(我猜是因为当计数器达到 sheet.count 的起始值时它停止运行)。关于如何使宏持续到最后的任何建议? 这是我第一次写代码,所以请温柔:)

【问题讨论】:

为什么要复制工作表而不是移动它们?这似乎只会使文件膨胀而没有真正的目的...... 我现在无法测试它(从平板电脑打字)。您可以使用递归函数或在 while 循环内再次调用计数或使用 GOTO 语句。我会尝试使用while x<nrOfSheets 进行while 循环。 【参考方案1】:

假设您要添加 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

希望这会有所帮助。 ;)

【讨论】:

以上是关于添加工作表时更新 sheet.count 值的主要内容,如果未能解决你的问题,请参考以下文章

将行添加到多个工作表时清除错误

使用 gspread 写入 Google 工作表时无法实现批量更新行

使用 sqlbulktools 更新表时对列值求和

当我使用按钮显示工作表时,工作表被拉下后,再次自动显示

SwiftUI 工作表在首次出现时不会访问状态变量的最新值

在配置单元中创建表时向列添加默认值