博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20170824xlVBA出车对账单
阅读量:4549 次
发布时间:2019-06-08

本文共 10184 字,大约阅读时间需要 33 分钟。

Private Sub GetClientAccountList()    Dim EndRow As Long    Dim i As Long, j As Long    Dim m As Long, n As Long    Dim TakeSum As Double, PaySum As Double    Dim NotTake As Double, NotPay As Double    Dim HasTake As Double, HasPay As Double    Dim FileName As String    Dim FolderPath As String    Dim FilePath As String    Dim Rng As Range    Dim Arr As Variant    Dim Brr(), iRows        Dim Crr()    ReDim Crr(1 To 4, 1 To 1)    Index = 0        Const HeadRow As Long = 1    Dim NewSht As Worksheet    Dim Wb As Workbook    Dim NewWb As Workbook    Dim Sht As Worksheet                    Set Wb = Application.ThisWorkbook    FolderPath = Wb.Path & "\先达对账单\"    Dim dClient As Object    Dim dTrade As Object    Set dClient = CreateObject("Scripting.Dictionary")    Set dTrade = CreateObject("Scripting.Dictionary")    Set Sht = Wb.Worksheets("明细")    With Sht        EndRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row        Set Rng = .Range("A2:T" & EndRow)        Arr = Rng.Value        For i = LBound(Arr) To UBound(Arr)            Key = CStr(Arr(i, 1))            If Key <> "" Then dClient(Key) = dClient(Key) & i & ";"            Key = CStr(Arr(i, 11))            If Key <> "" Then dTrade(Key) = dTrade(Key) & i & ";"        Next i    End With    Count = 0    For Each onekey In dClient.Keys        If Not dTrade.exists(onekey) Then            ''''————————————————————————————            NotTake = 0            '单纯客户                        Set NewWb = Application.Workbooks.Add            FileName = onekey & "--先达 2017对账单"            FilePath = FolderPath & FileName & ".xlsx"            On Error Resume Next            Kill FilePath            On Error GoTo 0            Set NewSht = NewWb.Worksheets(1)            NewSht.Name = FileName                        With NewSht                .Cells.Clear                With .Range("A1:J1")                    .Value = Array("客户", "日期", "行程", "车型", "记账RMB", "记账HK", "现收RMB", "现收HK", "先达应收", "先达应付")                    .Font.Bold = True                    With .Interior                        .Pattern = xlSolid                        .Color = 16763443                    End With                End With                iRows = Split(dClient(onekey), ";")                RowCount = UBound(iRows)                'Debug.Print RowCount                ReDim Brr(1 To RowCount, 1 To 12)                m = 0                For i = LBound(iRows) To UBound(iRows) - 1                    m = m + 1                    For j = 1 To 8                        Brr(m, j) = Arr(iRows(i), j)                    Next j                    Brr(m, 9) = Brr(m, 5) + Brr(m, 6) - Brr(m, 7) - Brr(m, 8)                    NotTake = NotTake + Brr(m, 9)                Next i                .Range("A2").Resize(RowCount, 10).Value = Brr                EndRow = .Cells.Find("*", .Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row                                desrow = EndRow + 1                .Cells(desrow, "I").Value = NotTake                .Cells(desrow + 1, "I").Value = NotTake                .Cells(desrow + 1, "I").Resize(1, 2).Merge                .Cells(desrow + 1, "C").Value = "合计"                SetBorders .UsedRange                SetCenters .UsedRange                .UsedRange.WrapText = True                .UsedRange.Columns.AutoFit                .UsedRange.Rows(1).RowHeight = 20                .UsedRange.Range("A:A").ColumnWidth = 10                .UsedRange.Range("B:B").ColumnWidth = 8                .UsedRange.Range("D:D").ColumnWidth = 6                .UsedRange.Range("E:J").ColumnWidth = 9                .UsedRange.Range("E:E,G:G,I:J").NumberFormat = """¥""#,##0;[Red]""¥""-#,##0"                '.UsedRange.Range("G:G").NumberFormat = """¥""#,##0;[Red]""¥""-#,##0"                .UsedRange.Range("F:F,H:H").NumberFormat = "\$#,##0;-\$#,##0"                '.UsedRange.Range("H:H").NumberFormat = "\$#,##0;-\$#,##0"                '.UsedRange.Range("I:J").NumberFormat = """¥""#,##0;[Red]""¥""-#,##0"                .UsedRange.Columns(3).ColumnWidth = 40                 .UsedRange.Columns(3).HorizontalAlignment = xlLeft                .Range("C65536").End(xlUp).HorizontalAlignment = xlCenter                SetCenters .Range("C1")            End With            NewWb.SaveAs FileName:=FilePath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False            NewWb.Close True            Index = Index + 1            ReDim Preserve Crr(1 To 4, 1 To Index)            Crr(1, Index) = onekey '公司名称            Crr(2, Index) = NotTake            Crr(3, Index) = 0            Crr(4, Index) = NotTake        Else            ''''————————————————————————————            NotTake = 0            NotPay = 0                        '同行客户            Set NewWb = Application.Workbooks.Add            FileName = onekey & "--先达 2017对账单"            FilePath = FolderPath & FileName & ".xlsx"            On Error Resume Next            Kill FilePath            On Error GoTo 0            Set NewSht = NewWb.Worksheets(1)            NewSht.Name = FileName            With NewSht                .Cells.Clear                With .Range("A1:J1")                    .Value = Array("客户", "日期", "行程", "车型", "记账RMB", "记账HK", "现收RMB", "现收HK", "先达应收", "先达应付")                    .Font.Bold = True                    With .Interior                        .Pattern = xlSolid                        .Color = 16763443                    End With                End With                iRows = Split(dClient(onekey), ";")                RowCount = UBound(iRows)                'Debug.Print RowCount                ReDim Brr(1 To RowCount, 1 To 12)                m = 0                For i = LBound(iRows) To UBound(iRows) - 1                    m = m + 1                    For j = 1 To 8                        Brr(m, j) = Arr(iRows(i), j)                    Next j                    Brr(m, 9) = Brr(m, 5) + Brr(m, 6) - Brr(m, 7) - Brr(m, 8)                    NotTake = NotTake + Brr(m, 9)                Next i                .Range("A2").Resize(RowCount, 10).Value = Brr                                '空一行                EndRow = .Cells.Find("*", .Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row + 2                ''''————————————————————————————                                '外调同行                iRows = Split(dTrade(onekey), ";")                RowCount = UBound(iRows)                'Debug.Print RowCount                ReDim Brr(1 To RowCount, 1 To 12)                m = 0                For i = LBound(iRows) To UBound(iRows) - 1                    m = m + 1                    Brr(m, 1) = "先达"                    For j = 2 To 4                        Brr(m, j) = Arr(iRows(i), j)                    Next j                    For j = 5 To 8                        Brr(m, j) = Arr(iRows(i), j + 7)                    Next j                                        Brr(m, 10) = Brr(m, 5) + Brr(m, 6) - Brr(m, 7) - Brr(m, 8)                    NotPay = NotPay + Brr(m, 10)                                    Next i                .Range("A" & EndRow).Resize(RowCount, 10).Value = Brr                '空一行                EndRow = .Cells.Find("*", .Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row + 1                                desrow = EndRow + 1                                .Cells(desrow, "I").Value = NotTake                .Cells(desrow, "J").Value = NotPay                                .Cells(desrow + 1, "I").Value = NotTake - NotPay                .Cells(desrow + 1, "I").Resize(1, 2).Merge                                .Cells(desrow + 1, "C").Value = "合计"                                SetBorders .UsedRange                SetCenters .UsedRange                .UsedRange.WrapText = True                .UsedRange.Columns.AutoFit                .UsedRange.Rows(1).RowHeight = 20                .UsedRange.Range("A:A").ColumnWidth = 10                .UsedRange.Range("B:B").ColumnWidth = 8                .UsedRange.Range("D:D").ColumnWidth = 6                .UsedRange.Range("E:J").ColumnWidth = 9                .UsedRange.Range("E:E,G:G,I:J").NumberFormat = """¥""#,##0;[Red]""¥""-#,##0"                '.UsedRange.Range("G:G").NumberFormat = """¥""#,##0;[Red]""¥""-#,##0"                .UsedRange.Range("F:F,H:H").NumberFormat = "\$#,##0;-\$#,##0"                '.UsedRange.Range("H:H").NumberFormat = "\$#,##0;-\$#,##0"                '.UsedRange.Range("I:J").NumberFormat = """¥""#,##0;[Red]""¥""-#,##0"                .UsedRange.Columns(3).ColumnWidth = 40                 .UsedRange.Columns(3).HorizontalAlignment = xlLeft                .Range("C65536").End(xlUp).HorizontalAlignment = xlCenter                SetCenters .Range("C1")            End With                        NewWb.SaveAs FileName:=FilePath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False            NewWb.Close True                                    Index = Index + 1            ReDim Preserve Crr(1 To 4, 1 To Index)            Crr(1, Index) = onekey '公司名称            Crr(2, Index) = NotTake            Crr(3, Index) = NotPay            Crr(4, Index) = NotTake - NotPay                    End If        'If Count = 1 Then Exit For    Next onekey        For Each onekey In dTrade.Keys        If Not dTrade.exists(onekey) Then            Debug.Print "仅同行"; onekey        End If    Next onekey        Set Sht = Wb.Worksheets("账单汇总")    With Sht        .UsedRange.Offset(1).Clear        Set Rng = .Range("A2")        Set Rng = Rng.Resize(UBound(Crr, 2), UBound(Crr))        Rng.Value = Application.WorksheetFunction.Transpose(Crr)        SetBorders .UsedRange        SetCenters .UsedRange        .UsedRange.Columns.AutoFit    End With        Set Wb = Nothing    Set NewWb = Nothing    Set Sht = Nothing    Set NewSht = Nothing    Set Rng = Nothing        Set dClient = Nothing    Set dTrade = Nothing    End SubPublic Sub SetBorders(ByVal Rng As Range)    With Rng.Borders        .LineStyle = xlContinuous        .ColorIndex = xlAutomatic        .TintAndShade = 0        .Weight = xlThin    End WithEnd SubPublic Sub SetCenters(ByVal Rng As Range)    With Rng        .HorizontalAlignment = xlCenter        .VerticalAlignment = xlCenter    End WithEnd Sub

  

转载于:https://www.cnblogs.com/nextseven/p/7425633.html

你可能感兴趣的文章
keras人工神经网络构建入门
查看>>
多元线性回归算法python实现(非常经典)
查看>>
机器学习入门介绍(非常易懂)
查看>>
多元线性回归算法的python底层代码编写实现
查看>>
机器学习梯度下降法的数学原理(非常易懂)
查看>>
数据归一化Scaler-机器学习算法
查看>>
梯度下降法的python代码实现(多元线性回归)
查看>>
最小二乘法的数学原理(机器学习线性回归)
查看>>
sklearn中实现随机梯度下降法(多元线性回归)
查看>>
机器学习线性回归算法的评价指标(简单线性回归问题)
查看>>
python表白实现代码(可视化与动画版)
查看>>
随机梯度下降法的调试
查看>>
PCA主成分分析算法的数学原理推导
查看>>
机器学习中的过拟合和欠拟合及交叉验证
查看>>
python实现PCA算法原理
查看>>
逻辑回归算法介绍
查看>>
sklearn中调用PCA算法
查看>>
逻辑回归的数学原理推导及原理代码实现
查看>>
PCA算法提取人脸识别特征脸(降噪)
查看>>
sklearn中的多项式回归算法
查看>>