20170824xlVBA出车对账单

Posted Excel VBA 小天地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

  

以上是关于20170824xlVBA出车对账单的主要内容,如果未能解决你的问题,请参考以下文章

20170824 - Q - 集合框架

20170824 - A - 集合框架

20170824图论选讲部分习题

20190321xlVBA_明细信息表汇总成数据表

基于java+jsp+ssm医院出车管理与绩效分配系统

20170112xlVBA查询SQL