将当前工作簿中的所有工作表复制到新工作簿,但第一张工作表除外

Posted

技术标签:

【中文标题】将当前工作簿中的所有工作表复制到新工作簿,但第一张工作表除外【英文标题】:Copy all sheets from current workbook to new workbook except the first sheet 【发布时间】:2020-05-14 12:54:01 【问题描述】:

我有一个基于宏的工作簿,我在其中运行多个进程,所有结果都存储在同一个 XLSM 工作簿中。我需要将所有输出工作表,即除了工作表(1)之外的所有工作表存储到一个新工作簿并将其保存为 xlsx(无宏文件)

我编写了一个非常简单的代码来复制特定工作表并将其重命名为 xlsx。但是,我需要复制除第一个以外的所有工作表并将其保存为无宏工作簿(以便输出文件中不存在 VBA 代码)

Sub copy()

   ThisWorkbook.Sheets("Sheet1").Copy
    ActiveWorkbook.SaveAs "C:\Output.xlsx", FileFormat:=51
End Sub

【问题讨论】:

未测试,但我认为复制文件本身,打开它并删除第一个工作表会更容易。 想象 4 张 (1, 2, 3, 4):您想要 2 在文件 2、3 在文件 3 和 4 在文件 4,还是想要一个文件有 2、3、4?你说的第一张纸是什么意思?标签栏第一个位置的工作表Sheets(1) 或名为Sheets("Sheet1") 的工作表请注意,它们可以是不同的工作表。 【参考方案1】:

这会将所有工作表从第二个工作表开始到最后,并将它们复制到一个新的工作簿中,然后最终删除 Excel 自动用作第一个工作表的“Sheet1”工作表。就个人而言,我认为复制当前工作簿然后删除第一张工作表可能要容易得多。

Sub copy()

Dim NewWkb As Workbook
Dim xWkb As Workbook
Dim x As Integer

With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
End With

Set xWkb = ThisWorkbook
Set NewWkb = Workbooks.Add

For x = 2 To xWkb.Worksheets.Count
    xWkb.Worksheets(x).copy after:=NewWkb.Worksheets(NewWkb.Worksheets.Count)
Next x

NewWkb.Worksheets("Sheet1").Delete

'Plenty of different ways to save a file, here's one way for a Mac
NewWkb.SaveAs Filename:="C:\Users\Folder\newfile", FileFormat:= 51

With Application
    .DisplayAlerts = True
    .ScreenUpdating = True
End With

End Sub

【讨论】:

已编辑。现在应该很好,除非我错过了其他东西 完美,正是我想要的。谢谢!

以上是关于将当前工作簿中的所有工作表复制到新工作簿,但第一张工作表除外的主要内容,如果未能解决你的问题,请参考以下文章

VBA 复制工作表至新的工作簿中的工作表

Excel:将工作簿复制到新工作簿

使用 Python(和 DataNitro)将单元格从一个 Excel 工作簿中的特定工作表复制到另一个 Excel 工作簿中的特定工作表

从同一工作簿中的另一个工作表读取数据的用户定义函数

将一个工作簿中的工作表中的VBA代码复制到另一个工作簿?

Excel 公式在工作簿中查找下一个工作表