• 20170824xlVBA出车对账单


    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 Sub
    Public Sub SetBorders(ByVal Rng As Range)
        With Rng.Borders
            .LineStyle = xlContinuous
            .ColorIndex = xlAutomatic
            .TintAndShade = 0
            .Weight = xlThin
        End With
    End Sub
    Public Sub SetCenters(ByVal Rng As Range)
        With Rng
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
        End With
    End Sub
    

      

  • 相关阅读:
    SCU 3133(博弈)
    SCU 3132(博弈)
    hdu 5183(hash)
    hdu3329(2次dfs)
    hdu5179(数位dp)
    zoj2314(有上下界的网络流)
    CF 519E(树上倍增求lca)
    hdu1251(Trie树)
    SCU 2009(数位dp)
    【Leetcode】Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/nextseven/p/7425633.html
Copyright © 2020-2023  润新知