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

Posted

技术标签:

【中文标题】Excel:将工作簿复制到新工作簿【英文标题】:Excel: Copy workbook to new workbook 【发布时间】:2013-12-31 00:30:43 【问题描述】:

所以在问这个问题之前,我搜索并发现了一些与我在这里想要做的事情相似的事情。

基本上我有工作簿 AlphaMaster。这个工作簿是一个模板,我想用它来创建每周的新工作簿。

在此工作簿中,有名为:Monday-Saturday 的工作表和其他工作表,对应的日期为 Mon、Tues 等。

我创建了一个在打开工作簿时加载的表单。我想要的是当我点击表单运行时:

将代码保存模板作为新工作簿运行 根据来自 userform1 的输入重命名工作簿

用适当的工作日重命名工作簿

工作簿以 6 张工作表的周末日期命名,在此之后(例如一周结束 1 月 5 日)被重命名为:

周末:2014 年 1 月 5 日 日期 周一:12 月 30 日 周二:12月31日 周三:1 月 1 日 星期四:1月2日 周五:1月3日 周六:1 月 4 日

比点击命令。到目前为止,这就是我所拥有的:

 Private Sub CommandButton1_Click()
Dim thisWb As Workbook, wbTemp As Workbook
Dim ws As Worksheet

On Error GoTo dummkopf

Application.DisplayAlerts = False

Set thisWb = ThisWorkbook
Set wbTemp = Workbooks.Add

On Error Resume Next
For Each ws In wbTemp.Worksheets
    ws.Delete
Next
On Error GoTo 0

For Each ws In thisWb.Sheets
    ws.Copy After:=wbTemp.Sheets(1)
Next

wbTemp.Sheets(1).Delete
wbTemp.SaveAs "blahblahblah\New.xlsx"

new.xlsx 我想从表单中填写

Vorfahren:
Application.DisplayAlerts = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Vorfahren
End Sub

并发症:

目前,虽然这确实有效,但我无法更改文档的名称,它以我在 .saveAs 区域中的名称命名。我想我需要创建一个备用函数来处理这个问题。其次,当它完成时,我的工作表以模板的相反顺序显示。

我们将不胜感激有关从这里去哪里的一些指导/建议!

【问题讨论】:

【参考方案1】:

这里有几个问题:

您不能删除工作簿中的所有工作表。

您应该将工作表复制到末尾以保留顺序(如果源工作簿中的工作表已排序):

For Each ws In thisWb.Sheets
    ws.Copy After:=wbTemp.Sheets(wbTemp.Sheets.Count)
    wbTemp.Sheets(wbTemp.Sheets.Count).Name = "NewSheetName" ' <-- Rename the copied sheet here
Next

如果您的源工作表没有名称“Sheet#”,则之后删除默认工作表。

Application.DisplayAlerts = False
For Each ws In wbTemp.Sheets
    If Instr(1, ws.Name, "Sheet", vbTextCompare) > 0 Then ws.Delete
Next
Application.DisplayAlerts = True

另存为,请参考Workbook.SaveAs Method (Excel)。

【讨论】:

谢谢帕特里克,有趣的是,你如何得到一个错误,而我没有。我对此感到很困惑。该链接实际上很有帮助,它引导我找到重命名工作簿问题所需的内容。原始工作簿确实有工作表的名称,Mon./Tues./Weds/12.1/12.2/12.3 我仍在尝试解决的问题我想是 VBA 中是否有办法在复制过程中重命名工作表来自用户输入表单? 我没有使用你的所有代码,如果你删除所有On Error... 行,你就会得到它。是否故意向您展示我在说什么 - 最后删除所有默认工作表,因此无需重复工作表删除:wbTemp.Sheets(1).Delete 在保存之前。 复制后重命名工作表...查看更新的代码(我不明白你的工作表命名约定)【参考方案2】:

我在我的应用程序中使用它并且效果很好

Set bFso = CreateObject("Scripting.FileSystemObject")
bFso.CopyFile ThisWorkbook.FullName, destinationFile, True     

复制后,您可以在新的 Excel 对象中打开它,然后用它做任何您想做的事情。

【讨论】:

以上是关于Excel:将工作簿复制到新工作簿的主要内容,如果未能解决你的问题,请参考以下文章

Excel 宏不会将工作表复制到新工作簿

VBA 如何批量将单元格复制到另一个工作表中

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

将工作表复制并保存到新工作簿

将范围复制到新的工作簿 FileDialog 提示不起作用

使用 Powershell 将 Excel 工作表从一个工作簿复制到另一个工作簿