如何将选定的工作表另存为新工作簿

Posted

技术标签:

【中文标题】如何将选定的工作表另存为新工作簿【英文标题】:How to save selected worksheets as a new workbook 【发布时间】:2020-02-10 09:54:12 【问题描述】:

您好,我正在尝试编写一个宏来将某些工作表选择到一个新文件中。

棘手的部分是我想保存除 3 之外的所有工作表。

我已设法选择工作表,但找不到如何创建新工作簿然后保存它。

这是我的代码,子停在Sheets(Array(Selection)).Copy

这不是正确的命令。

感谢您的帮助

Sub ExportPrices()

Dim ExportName As String
Dim ReportingDir As String
Dim Dashboard As String
Dim ws As Worksheet

Dashboard = ThisWorkbook.Name
ExportName = Workbooks(Dashboard).Worksheets("Macro").Range("ExportName").Value
ReportingDir = Workbooks(Dashboard).Worksheets("Macro").Range("ReportingDir").Value


Workbooks(Dashboard).Worksheets("Europe").Select

For Each ws In Worksheets
    If ws.Name <> "Macro" And ws.Name <> "Dashboard" And ws.Name <> "Data" Then
ws.Select (False)
    End If
Next

'create an array from selection

Sheets(Array(Selection)).Copy

    ActiveWorkbook.SaveAs Filename:=ReportingDir & ExportName, _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False

End Sub

【问题讨论】:

【参考方案1】:

您必须添加新工作簿并将目标表复制到 wb:

 Dim oOutBook As Workbook
 Set oOutBook = Workbooks.Add
 Sheets(Array(Selection)).Copy Before:=oOutBook.Sheets(1)
 oOutBook.SaveAs strPathOutput

【讨论】:

当发生这种情况时,我仍然在 Sheets(Array(Selection)).Copy 行上收到运行时错误“9”,我想复制到新文件的所有工作表都被选中,但我不知道如何使用代码参考此选择。有什么想法吗?【参考方案2】:

您可以在 VBA 中使用.Move method。当没有显示要移动到的位置时,.Move 方法会将指定的工作表移动到新工作簿中。

Sheets("Yoursheet").Move

由于这将始终是最新创建的工作簿,因此您可以使用 Workbooks.Count 参考:

Dim wb As Workbook
Set wb = Workbooks(Workbooks.Count)

【讨论】:

重点是我不想命名这些工作表。将来要导出的工作表数量会增加,我想保持代码灵活,以复制工作表“宏”“仪表板”“数据”以外的所有内容

以上是关于如何将选定的工作表另存为新工作簿的主要内容,如果未能解决你的问题,请参考以下文章

用于在另存为对话框中将工作表另存为预命名文件的 VBA 代码

遍历下拉列表并将工作簿另存为新文件

vba 指定工作簿,工作表,单元格

vbscript [将工作表另存为XLSX]将Excel文件中的所有工作表另存为单独的XLSX文件。 #Excel

Excel VBA之工作表复制新增另存为新工作薄

提示用户打开工作簿并另存为新工作簿