繁体   English   中英

VBA复制到新工作簿并保存

[英]VBA to copy into a new workbook and save

希望您能提供帮助。 我下面有代码。 从本质上讲,它会打开一个对话框,允许用户选择一个excel工作表,然后转到“国家/地区”列(11)对其进行过滤,然后将该国家/地区复制并粘贴到新的工作表中,并在此之后命名新的工作表。然后,该国家/地区针对下一个国家/地区重复操作。

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

我的代码如下。

一如既往,我们将不胜感激。

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

在此处输入图片说明

这还不完整,但我认为您需要遵循以下内容,添加一个wokbook变量:

'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")

希望能有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM