如何将电子表格拆分为多个文件,并在每个新文件中将数据拆分为多个工作表?

时间:2018-07-31 17:49:47

标签: excel vba excel-vba ms-office

我想根据一些条件使用VBA宏将数据拆分为多个文件,然后在新创建的文件中,根据另一个列过滤器(条件)再次拆分。

基本上,有两个YouTube教程单独解释了每个步骤,但是我并没有将它们混在一起。

第一个将主电子表格拆分为文件的文件,对我有用:https://www.youtube.com/watch?v=sCjqBlOk6f8

第二个将电子表格拆分为多个工作表:https://www.youtube.com/watch?v=5bOFNsdHiPk

第二个实际上并不完全符合我的需要,因为您必须执行一些手动步骤,例如选择和命名所需的范围(即“ Master”和“ SplitCode”)。我要拆分的数据和文件太多,所以我想有一个宏来自动拆分它,而无需像第二个教程那样手动进行拆分。但这实际上几乎是我所需要的。

因此,尝试将这两个代码混合使用,这是我尝试过的,但实际上不起作用:

Sub Split()

Dim wswb As String
Dim wssh As String

wswb = ActiveWorkbook.Name
wssh = ActiveSheet.Name

vColumn = InputBox("Please indicate which column you would like to split by", "Column selection")

Columns(vColumn).Copy
Sheets.Add
ActiveSheet.Name = "_Summary"
Range("A1").PasteSpecial
Columns("A").RemoveDuplicates Columns:=1, Header:=xlYes

vCounter = Range("A" & Rows.Count).End(xlUp).Row

For i = 2 To vCounter
    vFilter = Sheets("_Summary").Cells(i, 1)
    Sheets(wssh).Activate
    ActiveSheet.Columns.AutoFilter field:=Columns(vColumn).Column, Criteria1:=vFilter
    Cells.Copy
    Workbooks.Add
    Range("A1").PasteSpecial

    ActiveSheet.Name = "Master"


    dspColumn = "D"

    Columns(dspColumn).Copy
    Sheets.Add
    ActiveSheet.Name = "dspSummary"
    Range("A1").PasteSpecial
    Columns("A").RemoveDuplicates Columns:=1, Header:=xlYes

    dspCounter = Range("A" & Rows.Count).End(xlUp).Row

    For j = 2 To dspCounter
        dspFilter = Sheets("dspSummary").Cells(j, 1)
        Sheets("Master").Activate
        ActiveSheet.Columns.AutoFilter field:=Columns(dspColumn).Column, Criteria1:=dspFilter
        Cells.Copy
        Sheets.Add
        ActiveSheet.Name = dspFilter
        Range("A1").PasteSpecial
    Next j

    If vFilter <> "" Then
        ActiveWorkbook.SaveAs ThisWorkbook.Path & "\Split Results\" & vFilter
    Else
        ActiveWorkbook.SaveAs ThisWorkbook.Path & "\Split Results\_Empty"
    End If


    ActiveWorkbook.Close
    Workbooks(wswb).Activate
Next i
'Sheets("_Summary").Delete

End Sub

欢迎任何帮助!

1 个答案:

答案 0 :(得分:0)

好的,我上面发布的代码可以正常工作。唯一的问题是这条线

ActiveSheet.Name = dspFilter

复制的dspFilter(工作表名称)长于允许的31个字符。

因此将该行更改为

ActiveSheet.Name = Left(dspFilter, 30)

解决了问题。

感谢任何发表评论或试图考虑的人。