VBA复制到一个新的工作簿并保存

我希望你能帮上忙。 我有下面的代码。 基本上它是这样做的,它打开一个对话框,允许用户select一个Excel工作表,然后出口到国家栏(11)过滤它,然后将该国家复制并粘贴到一个新的工作表命名新的工作表之后那个国家就会重复下一个国家的行动。

我现在想要做的是不是创build一个新的工作表并命名它。 我希望它为每个国家创build一个新的工作簿,复制并粘贴信息,然后将新工作簿保存并命名为一个文件夹。

我的代码如下。

任何帮助一如既往不胜感激。

Sub Open_Workbook_Dialog() Dim my_FileName As Variant MsgBox "Pick your TOV file" '<--| txt box for prompt to pick a file my_FileName = Application.GetOpenFilename(FileFilter:="Excel Files,*.xl*;*.xm*") '<--| Opens the file window to allow selection If my_FileName <> False Then Workbooks.Open Filename:=my_FileName Call Filter '<--|Calls the Filter Code and executes End If End Sub Public Sub Filter() Dim rCountry As Range, helpCol As Range With Worksheets("CountryList") '<--| refer to data worksheet With .UsedRange Set helpCol = .Resize(1, 1).Offset(, .Columns.Count) '<--| get a "helper" column just at the right of used range, it'll be used to store unique country names in End With With .Range("A1:Y" & .Cells(.Rows.Count, 1).End(xlUp).Row) '<--| refer to its columns "A:Q" from row 1 to last non empty row of column "A" .Columns(11).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=helpCol, Unique:=True '<-- call AdvancedFilter on 6th column of the referenced range and store its unique values in "helper" column Set helpCol = Range(helpCol.Offset(1), helpCol.End(xlDown)) '<--| set range with unique names in (skip header row) For Each rCountry In helpCol '<--| iterate over unique country names range (skip header row) .AutoFilter 11, rCountry.Value2 '<--| filter data on country field (6th column) with current unique country name If Application.WorksheetFunction.Subtotal(103, .Cells.Resize(, 1)) > 1 Then '<--| if any cell other than header ones has been filtered... Worksheets.Add Worksheets(Worksheets.Count) '<--... add new sheet ActiveSheet.Name = rCountry.Value2 '<--... rename it .SpecialCells(xlCellTypeVisible).Copy ActiveSheet.Range("A1") 'copy data for country under header End If Next End With .AutoFilterMode = False '<--| remove autofilter and show all rows back End With helpCol.Offset(-1).End(xlDown).Clear '<--| clear helper column (header included) End Sub 

在这里输入图像说明

这是不完整的,但我想你想要的东西沿这些线,添加一个wokbookvariables:

 'Add this above the loop Dim wb As Workbook 'Replace where you create a new sheet with something similar to this Set wb = Application.Workbooks.Add wb.SaveAs Filename:=rCountry.Value2 .SpecialCells(xlCellTypeVisible).Copy wb.Sheets(1).Range("A1") 

希望有所帮助