1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| Sub copybat() Dim i, j, k, m, r As Integer Dim n, total_data As Long Dim path As String Dim title_area, data_column, data_areas As Range Set title_area = Application.InputBox(prompt:="请用鼠标选择表头及表标题所在区域", title:="选择", Type:=8) Set data_column = Application.InputBox(prompt:="请鼠标选择需要拆分数据的开始行区域", title:="选择", Type:=8) m = data_column.Row r = data_column.Column j = data_column.Columns.Count i = Application.InputBox(prompt:="请输入每次分割数据条目数", title:="选择") total_data= Cells.Find("*", LookIn:=xlFormulas, SearchDirection:=xlPrevious).Row- m + 1 If MsgBox("本次分割文件数据总数为:" & total_data & "条,将会被分割成" & WorksheetFunction.RoundUp(total_data / i, 0) & "个文件," _ & "点击“确定”开始分割,点击“取消”返回", vbOKCancel, "确认") = vbOK Then filename = Application.InputBox(prompt:="请输入分割后的文件主名,默认为“分割文件”", title:="选择", Default:="分割文件") With Application.FileDialog(msoFileDialogFolderPicker) If .Show = False Then Exit Sub path = .SelectedItems(1)&"\" End With Application.ScreenUpdating = False k = 0 For n = m To total_data Step i Set data_areas = Range(Cells(n, r), Cells(n + i - 1, j)) Application.Union(title_area, data_areas).Select Selection.Copy Workbooks.Add Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _ , SkipBlanks:=False, Transpose:=False k = k + 1 ActiveWorkbook.SaveAs filename:=path & filename & "_" & k & ".xlsx", FileFormat:= _ xlOpenXMLWorkbook, CreateBackup:=False ActiveWindow.Close Next n MsgBox "文件分割完毕!", vbDefaultButton1, "提示" End If Application.ScreenUpdating = True End Sub
|