一个包含多个工作表的Excel(.xlsx)文件如何“拆分”为单独的工作表[n] .xlsx?


17

我认为标题说明了所有问题,但需要进一步阐述:

我有一个.xlsx文件,其中包含几十张纸。我想将所有这些工作表输出为单独的.xlsx文件。不需要自动命名它们。excel是否具有将图纸导出到单独文件的功能?

Answers:


17

它不是内置功能。

但是,如果您运行此代码,它就可以完成任务。

Sub SaveSheets()
    Dim strPath As String
    Dim ws As Worksheet

    Application.ScreenUpdating = False

    strPath = ActiveWorkbook.Path & "\"
    For Each ws In ThisWorkbook.Sheets
        ws.Copy
        'Use this line if you want to break any links:
        BreakLinks Workbooks(Workbooks.Count)
        Workbooks(Workbooks.Count).Close True, strPath & ws.Name & ".xlsx"
    Next

    Application.ScreenUpdating = True
End Sub

Sub BreakLinks(wb As Workbook)
    Dim lnk As Variant
    For Each lnk In wb.LinkSources(xlExcelLinks)
        wb.BreakLink lnk, xlLinkTypeExcelLinks
    Next
End Sub

要运行代码,请执行以下操作:

  1. 打开VBA编辑器(Alt+ F11
  2. 在左上角的树中,右键单击您的工作簿并插入一个新模块
  3. 将上面的代码复制到该模块中
  4. 关闭VBA编辑器
  5. 在Excel中,按Alt+ F8运行宏,然后选择SaveSheets

或参阅如何在MS Office中添加VBA?


谢谢!反过来呢?-把它放在一起吗?这个excel文件显然包含“链接”(之前我没有使用过此功能),并且在拆分的Excel之后找不到链接(它正在寻找第一张表);是否可以拆分它们并同时更新链接/或仅更新链接?
eichoa3I 2013年

1
问题是您要如何处理链接。您可以通过Workbooks(Workbooks.Count).BreakLinksws.Copy... 后面插入来轻松地将它们替换为值
彼得·艾伯特

打开一个工作簿后,Excel中的弹出窗口提示我修复链接。我单击了此对话框,现在链接适用于所有文件。我想知道是否将其保存在文件中或本地...
eichoa3I

当您说用Workbooks(Workbooks.Coun)的值替换它们时。BreakLinks是指链接被删除还是...?我认为处理它们的最佳方法就是简单地删除它们(即,当用户打开现在分离的Excel文件时,他们看不到有关链接断开的警告)。
eichoa3I 2013年

很抱歉,请Workbooks(Workbooks.Count).BreakLink-没有s在最后
彼得·阿尔伯特

11
  1. 右键单击Excel工作表的选项卡时,可以选择“ 移动”或“复制...”。

    在此处输入图片说明

  2. 在出现的对话框中,您可以选择目标工作簿。选择(新书)

    在此处输入图片说明

  3. 单击确定。您的工作表现在位于新文档中。


8

我试着彼得·艾伯特的解决方案,它并没有为我工作,所以我找到了一个解决方案这篇文章(“创先争优-保存工作表作为单独的文件”)的计算机怪胎的日记

效果很好。您应该重命名包含点的图纸,以获取带有.xls扩展名的正确命名的文件。

Sub CreateNewWBS()
Dim wbThis As Workbook
Dim wbNew As Workbook
Dim ws As Worksheet
Dim strFilename As String

    Set wbThis = ThisWorkbook
    For Each ws In wbThis.Worksheets
        strFilename = wbThis.Path & "/" & ws.Name
        ws.Copy
        Set wbNew = ActiveWorkbook
        wbNew.SaveAs strFilename
        wbNew.Close
    Next ws
End Sub

使用说明从Peter Albert的帖子或如何在MS Office中添加VBA来创建和运行此宏


1
我也试过彼得阿尔伯特的解决方案,并有一个错误“运行时error'13'类型匹配:幸运的是,在这个答案的解决方案适用于我。

如何获取覆盖相同名称的现有文件?
DAE

我不需要这个,因为每个转储都进入一个单独的文件夹。也许尝试这个线程
hrvoj3e

您的解决方案对我
有用
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.