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