你测试一下看是否符合要求
Sub test()
Dim vArr, brr, crr, dic As Object, sht As Worksheet
Dim i%, j%, num%, shp As Shape, wb As Workbook, k, drr, n, t
vArr = Sheet1.Range("A1").CurrentRegion
Set dic = CreateObject("scripting.dictionary")
Set sht = Sheet2
t = Timer
For i = 2 To UBound(vArr)
dic(vArr(i, 5)) = dic(vArr(i, 5)) & "\" & i
Next i
For Each shp In Sheet2.Shapes
shp.Delete
Next shp
drr = Array("单据编号", "日期", "产品名称", "规格型号", "单位", "实发数量", "销售单价", "销售金额", "备注")
For Each k In dic.keys
brr = Split(dic(k), "\")
ReDim crr(1 To UBound(brr), 1 To 9)
For i = 0 To UBound(drr) - 1
For j = 1 To UBound(brr)
For n = 1 To UBound(vArr, 2)
If vArr(1, n) = drr(i) Then crr(j, i + 1) = vArr(--brr(j), n)
Next n
crr(j, 9) = crr(j, 7) * crr(j, 8)
Next j
Next i
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set wb = Workbooks.Add
sht.Cells.Copy wb.Sheets(1).[a1]
With wb.Sheets(1)
.Rows(4).Resize(UBound(crr) - 3).Insert
.[a4].Resize(UBound(crr), 9) = crr
End With
wb.SaveAs ThisWorkbook.Path & "\" & k & ".xlsx"
wb.Close True
Next k
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "处理完成,用时:" & Timer - t & "秒"
End Sub