Sub CreateSaleList() AppSettings On Error GoTo ErrHandler Dim StartTime As Variant '开始时间 Dim UsedTime As Variant '使用时间 StartTime = VBA.Timer '记录开始时间 Dim Wb As Workbook Dim Sht As Worksheet Dim oSht As Worksheet Dim NewSht As Worksheet Dim iRow As Long Dim NewRow As Long Dim Dic As Object Dim Key As String Dim PageNo As Long Set Wb = Application.ThisWorkbook For Each oSht In Wb.Worksheets If oSht.Name <> "明细" And oSht.Name <> "模板" Then Debug.Print oSht.Name oSht.Delete End If Next oSht Set Sht = Wb.Worksheets("明细") Set oSht = Wb.Worksheets("模板") Set Dic = CreateObject("Scripting.Dictionary") With Sht iRow = 3 Do While .Cells(iRow, 1).Value <> "" Key = .Cells(iRow, 1).Value Dic(Key) = Dic(Key) + 1 PageNo = Int((Dic(Key) - 1) / 5) + 1 NewName = Key & "(" & PageNo & ")" If Dic(Key) Mod 5 = 1 Then ' On Error Resume Next ' Wb.Worksheets(NewName).Delete ' On Error GoTo 0 oSht.Copy After:=Wb.Worksheets(Wb.Worksheets.Count) Set NewSht = Wb.Worksheets(Wb.Worksheets.Count) NewSht.Name = Key & "(" & PageNo & ")" NewSht.Range("B3").Value = .Cells(iRow, "C").Value NewSht.Range("E3").Value = .Cells(iRow, "B").Value NewSht.Range("G2").Value = NewSht.Range("G2").Value & .Cells(iRow, "A").Value NewSht.Range("G3").Value = NewSht.Range("G3").Value & .Cells(iRow, "L").Value End If NewRow = 4 + (Dic(Key) - 1) Mod 5 + 1 NewSht.Cells(NewRow, 1).Value = .Cells(iRow, 6).Value NewSht.Cells(NewRow, 2).Value = .Cells(iRow, 7).Value NewSht.Cells(NewRow, 3).Value = .Cells(iRow, 8).Value NewSht.Cells(NewRow, 4).Value = .Cells(iRow, 11).Value NewSht.Cells(NewRow, 5).Value = .Cells(iRow, 10).Value NewSht.Cells(NewRow, 6).Value = .Cells(iRow, 13).Value NewSht.Cells(NewRow, 7).Value = .Cells(iRow, 9).Value iRow = iRow + 1 If iRow = 60 Then Exit Do '防止死循环 Loop End With Set Wb = Nothing Set Sht = Nothing Set oSht = Nothing Set NewSht = Nothing AppSettings False UsedTime = VBA.Timer - StartTime MsgBox "本次运行耗时:" & Format(UsedTime, "#0.0000秒") ErrorExit: AppSettings False Exit Sub ErrHandler: If Err.Number <> 0 Then MsgBox Err.Description & "!", vbCritical, "QQ 84857038" Debug.Print Err.Description Err.Clear Resume ErrorExit End If End Sub Public Sub AppSettings(Optional IsStart As Boolean = True) If IsStart Then Application.ScreenUpdating = False Application.DisplayAlerts = False Application.Calculation = xlCalculationManual Application.StatusBar = ">>>>>>>>Macro Is Running>>>>>>>>" Else Application.ScreenUpdating = True Application.DisplayAlerts = True Application.Calculation = xlCalculationAutomatic Application.StatusBar = False End If End Sub