|
- Sub tst()
- '源数据
- Dim arr
- '工作表名,临时字符串
- Dim strShtname As String, strTemp As String
- '工作簿循环,数组循环
- Dim i As Integer, j As Long
- '单元格
- Dim rg As Range
- '工作表名数组字符串
- Dim strShtArr As String, arrSheet
- '字典对象
- Dim objDic As Object, objDicKeyItem
- '关属性,提速
- With Application
- .ScreenUpdating = False
- .DisplayAlerts = False
- .EnableEvents = False
- .Calculation = xlCalculationManual
- End With
- '先清空工作表内原有内容
- For i = 3 To Worksheets.Count
- Worksheets(i).UsedRange.ClearContents
- Next
- '创建字典
- Set objDic = CreateObject("scripting.dictionary")
- For i = 1 To 2
- '取工作表名
- strShtname = Worksheets(i).Name
- '取工作表名中-号前的文本
- strTemp = Left(strShtname, InStr(strShtname, "-") - 1)
- '读取源数据
- arr = Worksheets(i).Range("a1").CurrentRegion.Value
- '添加\,
- strShtArr = strShtArr & strTemp & "\,"
- '数组循环
- For j = LBound(arr) + 1 To UBound(arr)
- '添加店铺号
- objDic(arr(j, 1)) = ""
- '检测工作表是否存不,不存在则创建
- If Not HasWorksheet(strTemp & "-" & arr(j, 1)) Then
- Worksheets.Add after:=Worksheets(Worksheets.Count)
- ActiveSheet.Name = strTemp & "-" & arr(j, 1)
- End If
- '写入内容
- With Worksheets(strTemp & "-" & arr(j, 1))
- Set rg = .Cells(Rows.Count, 1).End(xlUp)
- If rg.Row = 1 Then
- rg.Resize(, 2).Value = Array("店号", "金额")
- End If
- rg.Offset(1).Resize(, 2).Value = Array(arr(j, 1), arr(j, 2))
- End With
- Next
- Next
- '导出同店铺号的购销与代销
- For Each objDicKeyItem In objDic.keys
- strTemp = Replace(Left(strShtArr, Len(strShtArr) - 1), "", "-" & objDicKeyItem)
- arrSheet = Split(strTemp, ",")
- Worksheets(arrSheet).Copy
- ActiveWorkbook.SaveAs ThisWorkbook.Path & Application.PathSeparator & objDicKeyItem & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
- Debug.Print ActiveWorkbook.FullName
- ActiveWorkbook.Close False
- Next
- '开属性,还原
- With Application
- .ScreenUpdating = True
- .DisplayAlerts = True
- .EnableEvents = True
- .Calculation = xlCalculationAutomatic
- End With
- MsgBox "导出成功"
- End Sub
- Function HasWorksheet(strShtname As String) As Boolean
- On Error Resume Next
- If Len(Worksheets(strShtname).Name) = 0 Then
- HasWorksheet = False
- Err.Clear
- Else
- HasWorksheet = True
- End If
- End Function
复制代码 |
|