Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何将工作表从一个工作簿复制到另一个工作簿?_Vba_Excel - Fatal编程技术网

Vba 如何将工作表从一个工作簿复制到另一个工作簿?

Vba 如何将工作表从一个工作簿复制到另一个工作簿?,vba,excel,Vba,Excel,我是VBA新手,使用宏根据某些条件将工作簿拆分为多个文件,然后根据其他条件将这些文件再次拆分为多个工作表 将结束文件拆分为多个工作表后,我希望将一个工作表从主文件复制到每个目标文件,并且此复制的工作表应位于新文件中所有其他新创建工作表的末尾 我的代码与我试图复制该工作表的行有问题。如果我不尝试在代码末尾复制该工作表,那么每件事情都可以正常工作,并且我会将许多目标文件拆分为多个工作表。如果我试图添加代码行来复制工作表,我需要按原样复制,我只会得到一个目标文件(第一次拆分)和该行的代码错误 以下是执

我是VBA新手,使用宏根据某些条件将工作簿拆分为多个文件,然后根据其他条件将这些文件再次拆分为多个工作表

将结束文件拆分为多个工作表后,我希望将一个工作表从主文件复制到每个目标文件,并且此复制的工作表应位于新文件中所有其他新创建工作表的末尾

我的代码与我试图复制该工作表的行有问题。如果我不尝试在代码末尾复制该工作表,那么每件事情都可以正常工作,并且我会将许多目标文件拆分为多个工作表。如果我试图添加代码行来复制工作表,我需要按原样复制,我只会得到一个目标文件(第一次拆分)和该行的代码错误

以下是执行此操作的全部代码:

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:=6, Criteria1:="100%"
    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
    Splitcode = 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 = Left(dspFilter, 30)

        Range("A1").PasteSpecial
    Next j
    Sheets("Master").Delete
    Sheets("dspSummary").Delete

    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
    Sheets("Reasons codes").Copy After:=Workbooks(ThisWorkbook.Path & "\Split Results\" & vFilter & ".xlsx").Sheets(Sheets.Count)
Next i
Sheets("_Summary").Delete

End Sub
Sub SplitM()

End Sub
没有它,一切都很好,没有窃听。添加了那一行,只创建了一个文件,我想在循环末尾复制的工作表当然不会被复制,我在那一行遇到了一个bug

在这一行之前,我实际上要做的是获取主工作簿,激活它,然后从中复制一个名为“原因代码”的工作表,并将其复制到我创建的每个拆分文件中,在该目标文件中创建的工作表的最末端(也使用目标文件的循环进行拆分)


顺便说一下,主(原始)文件中的“G”列,以及我从中拆分的原始工作表,有一些数据验证,链接到我试图复制的工作表“原因代码”。因此,如果您也有一个解决方案,如何在新文件的新工作表中链接该列,当然,在将“原因代码”工作表复制到每个目标文件之后,这将非常棒!实际上,新(拆分/目标)文件中的每个拆分工作表在“G”列中的内容与我从中复制的主文件中的主工作表的内容相同。现在只是粘贴文本,但当我查看数据验证时,我发现它链接到主文件名,以及主文件的“原因代码”,这就是验证不起作用的原因。每一行都应该链接到同一文件中新创建的“原因代码”工作表。

我有一个vba脚本,它从6个主文件中获取工作表并输出它们-总共40组。。。所以,看一看,看看你们是否能适应你们的需要-若它有助于提高投票将不胜感激:目标文件必须是开放的复制到。因此,请对ActiveWorkbook进行注释。关闭上面的,它应该会工作。你可以在这里找到一个编程验证的好例子:@AcsErno不,我以前试过,现在又试过了,但这不是问题所在。还在那条线上窃听。也许我不能给出一条通向“工作手册”的路径作为论据或其他什么?PS:正如您所看到的,“vFilter”只是从原始文件中分离出来的文件名。所以这是一条线
Sheets("Reasons codes").Copy After:=Workbooks(ThisWorkbook.Path & "\Split Results\" & vFilter & ".xlsx").Sheets(Sheets.Count)