Back to Papers and Articles
Rendering the results of an Access Database in Excel (The code)
Copyright 2001 Paragon Corporation   ( August 11, 2001)
Back to Rendering the results of an Access Database in Excel

Option Compare Database
Option Explicit
'Module modExcelReport for budget database
Dim xlBudgetSchedule As Excel.Application

Public Sub ChartBudgetPaymentsCategory()
    Dim xlChart As Excel.Chart, xlco As ChartObject
    Dim sqlEncumbrance As String, i As Integer, j As Integer, currentYear As Integer, numberOfQuarters As Integer
    Dim currentRow, currentColumn, currentQuarter As String, categoryChanged As Boolean, currentCategoryID As Integer
    Dim sumPayments, quarterBudget, quarterBudgetTransfer, quarterOriginalBudget, theQuarter As String, theMonth As String, budgetToDate
    Dim Budget, budgetTransfer, originalBudget, currentMonth As String
    Dim aryQuarters(10) As String, theWeekStart As Date, monthIncrement As Integer
    Dim meterReturn As Integer, lngProgress As Long, budgetToDateFormula As String
    Dim firstDayOfMonth As Date 'first day of the next month
    Dim firstDayOfQuarter As Date
    Dim columnLetter As String
    Dim rstPayments As Recordset
    
    Set rstPayments = CurrentDb.OpenRecordset("qryCategoryPaymentsByMonth_CrossTab")
    xlBudgetSchedule.ActiveWorkbook.Worksheets.Add After:=xlBudgetSchedule.ActiveWorkbook.ActiveSheet
    xlBudgetSchedule.ActiveSheet.Name = "Payments"
    

    xlBudgetSchedule.Visible = True
'*** Populate payments
    currentRow = 1
    
    xlBudgetSchedule.ActiveSheet.Cells(currentRow, 1).Value = "Date"
    
    
    For i = 1 To rstPayments.Fields.Count - 1 'Skip month label
        xlBudgetSchedule.ActiveSheet.Cells(currentRow, i + 1).Value = rstPayments.Fields(i).Name
        xlBudgetSchedule.ActiveSheet.Cells(currentRow, i + 1).Font.Bold = True
        xlBudgetSchedule.ActiveSheet.Columns(i + 1).AutoFit
    Next
    
    currentRow = 2
    
    xlBudgetSchedule.ActiveSheet.Cells(currentRow, 1).CopyFromRecordset rstPayments
    currentRow = currentRow + rstPayments.RecordCount
    
    xlBudgetSchedule.ActiveSheet.Range("B2:J100").NumberFormat = "#,##0_);[Red](#,##0)"
    
    
   Set xlChart = xlBudgetSchedule.Charts.Add
   With xlChart
        .ChartWizard Source:=xlBudgetSchedule.Worksheets("Payments").Range("A2:" & ExcelColumnLetters(rstPayments.Fields.Count) & currentRow), _
         Gallery:=xlLine, PlotBy:=xlColumns, _
        CategoryLabels:=1, HasLegend:=1, CategoryTitle:="To Date", ValueTitle:="Total Paid", Title:="Budget Payments By Category"
        .PageSetup.Orientation = xlPortrait
        .Name = "Chart of Payments"
   End With
   
   rstPayments.MoveFirst
    With xlChart.Legend
        .Font.Bold = True
        .Font.Name = "Arial"
        .Font.Size = 7
    End With
    For i = 1 To rstPayments.Fields.Count - 1 'Skip month label
        With xlChart.SeriesCollection(i)
            .Name = rstPayments.Fields(i).Name
        End With
    Next
   
    With xlChart.Axes(xlValue)
       .MinimumScale = "0"
    End With
    
    
    xlBudgetSchedule.Visible = True
    

End Sub

Public Sub BuildBudgetSchedule(aDayInWeek As Date)

    Dim rstCategory As Recordset, rstEncumbrance As Recordset, theWeekEnd As Date
    Dim sqlEncumbrance As String, i As Integer, j As Integer, currentYear As Integer, numberOfQuarters As Integer
    Dim currentRow, currentColumn, currentQuarter As String, categoryChanged As Boolean, currentCategoryID As Integer
    Dim sumPayments, quarterBudget, quarterBudgetTransfer, quarterOriginalBudget, theQuarter As String, theMonth As String, budgetToDate
    Dim Budget, budgetTransfer, originalBudget, currentMonth As String
    Dim aryQuarters(5) As String, theWeekStart As Date, monthIncrement As Integer
    Dim meterReturn As Integer, lngProgress As Long, budgetToDateFormula As String
    Dim firstDayOfMonth As Date 'first day of the next month
    Dim firstDayOfQuarter As Date, tempDate As Date
    Dim columnLetter As String
    
    lngProgress = 0
    meterReturn = SysCmd(acSysCmdInitMeter, "Generating Budget Report ...", 100)
    
    theWeekStart = aDayInWeek - WeekDay(aDayInWeek, vbWednesday) + 1   'Week start's wednesday
    theWeekEnd = theWeekStart + 6
    firstDayOfQuarter = CDate((DatePart("q", theWeekStart) * 3 - 2) & "/1/" & Year(theWeekStart)) 'first day of quarter this day lies in
    firstDayOfMonth = DateAdd("m", 1, theWeekEnd - Day(theWeekEnd) + 1) 'First day of next month
    
    
    currentYear = Year(Date)
    numberOfQuarters = UBound(aryQuarters)
'*** Populate aryQuarters array
   
    For i = 0 To numberOfQuarters
        tempDate = DateAdd("q", i - 1, firstDayOfQuarter)
        aryQuarters(i) = Trim(Year(tempDate) & DatePart("q", tempDate))
    Next
    
    Set rstCategory = CurrentDb.OpenRecordset("SELECT C.CategoryID, C.Category, B.BudgetName " & _
        "FROM CategoryLU C INNER JOIN Budget B ON C.CategoryID = B.BudgetID  ORDER BY C.Category, B.BudgetName", dbOpenSnapshot)
            
    Set xlBudgetSchedule = New Excel.Application
    xlBudgetSchedule.Visible = True
    
    xlBudgetSchedule.Workbooks.Add
    xlBudgetSchedule.ActiveWindow.DisplayGridlines = False 'Do not show grid lines so it looks more like a report
    
    currentRow = 1
    currentColumn = 1
    
    With xlBudgetSchedule.ActiveSheet
        .Cells(currentRow, currentColumn).Value = "BUDGET SCHEDULE"
        .Cells(currentRow, currentColumn).Font.Bold = True
        .Cells(currentRow, currentColumn).Font.Name = "Times New Roman"
        .Cells(currentRow, currentColumn).Font.Size = 11
        .Cells(currentRow, currentColumn).HorizontalAlignment = xlCenter
        
        
        currentRow = currentRow + 1
        .Cells(currentRow, currentColumn).Value = "CASH FLOW PROJECTIONS for next 4 quarters"
        .Cells(currentRow, currentColumn).Font.Bold = True
        .Cells(currentRow, currentColumn).Font.Name = "Times New Roman"
        .Cells(currentRow, currentColumn).Font.Size = 11
        .Cells(currentRow, currentColumn).HorizontalAlignment = xlCenter
        
        currentRow = currentRow + 1
        .Cells(currentRow, currentColumn).Value = "PREPARED " & Now
        .Cells(currentRow, currentColumn).Font.Bold = True
        .Cells(currentRow, currentColumn).Font.Name = "Times New Roman"
        .Cells(currentRow, currentColumn).Font.Size = 11
        .Cells(currentRow, currentColumn).HorizontalAlignment = xlCenter
        
        currentRow = currentRow + 2
        
        xlBudgetSchedule.ActiveWorkbook.Colors(1) = RGB(230, 230, 230) 'define first color in workbook palette to be a light grey shade
        
        currentRow = currentRow + 1
        .Cells(currentRow, currentColumn).Value = "Category"
        .Cells(currentRow, currentColumn).Font.Bold = True
        .Cells(currentRow, currentColumn).Font.Name = "Times New Roman"
        .Cells(currentRow, currentColumn).Font.Size = 11
    End With
    
    'currentColumn = currentColumn + 1
    currentRow = currentRow - 1
    
    i = 0
    
    
    Do Until i > numberOfQuarters
    
            i = i + 1
            currentYear = Left(aryQuarters(i - 1), 4)
        
'*** Heading Section: If we are in the current quarter - need to break this out to start to week , week, rest of quarter ***

            If (Year(theWeekStart) & DatePart("q", theWeekStart)) = aryQuarters(i - 1) Then
                With xlBudgetSchedule.ActiveSheet
                    .Cells(currentRow, currentColumn + i).Value = "Q " & Mid(aryQuarters(i - 1), 5, 1) & " " & currentYear & " Up (to " & theWeekEnd & ")"
                    .Cells(currentRow, currentColumn + i).WrapText = True
                    .Cells(currentRow, currentColumn + i).Font.Bold = True
                    .Cells(currentRow, currentColumn + i).Font.Name = "Times New Roman"
                    .Cells(currentRow, currentColumn + i).Font.Size = 11
                
                    .Cells(currentRow + 1, currentColumn + i).Value = "Paid"
                    .Cells(currentRow + 1, currentColumn + i).Font.Italic = True
                    .Cells(currentRow + 1, currentColumn + i).Font.Name = "Times New Roman"
                    .Cells(currentRow + 1, currentColumn + i).Font.Size = 8
                    .Cells(currentRow + 1, currentColumn + i).HorizontalAlignment = xlCenter
         
                    .Cells(currentRow, currentColumn + i + 1).Value = "Summary As Of Week Ending " & theWeekEnd
                    .Cells(currentRow, currentColumn + i + 1).Font.Bold = True
                    .Cells(currentRow, currentColumn + i + 1).Font.Name = "Times New Roman"
                    .Cells(currentRow, currentColumn + i + 1).Font.Size = 11
                    .Cells(currentRow, currentColumn + i + 1).HorizontalAlignment = xlCenter
                    .Range(Chr(65 + currentColumn + i) & currentRow & ":" & Chr(65 + currentColumn + i + 2) & currentRow).Merge
                    
                    
                    'currentRow = currentRow + 1
                    .Cells(currentRow + 1, currentColumn + i + 1).Value = "Paid To Date"
                    .Cells(currentRow + 1, currentColumn + i + 1).Font.Italic = True
                    .Cells(currentRow + 1, currentColumn + i + 1).Font.Name = "Times New Roman"
                    .Cells(currentRow + 1, currentColumn + i + 1).Font.Size = 8
                    .Cells(currentRow + 1, currentColumn + i + 1).HorizontalAlignment = xlCenter
                    
                    .Cells(currentRow + 1, currentColumn + i + 2).Value = "Budget To Date"
                    .Cells(currentRow + 1, currentColumn + i + 2).Font.Italic = True
                    .Cells(currentRow + 1, currentColumn + i + 2).Font.Bold = True
                    .Cells(currentRow + 1, currentColumn + i + 2).Font.Name = "Times New Roman"
                    .Cells(currentRow + 1, currentColumn + i + 2).Font.Size = 8
                    .Cells(currentRow + 1, currentColumn + i + 2).HorizontalAlignment = xlCenter
                    
                    .Cells(currentRow + 1, currentColumn + i + 3).Value = "Difference To Date"
                    .Cells(currentRow + 1, currentColumn + i + 3).Font.Italic = True
                    .Cells(currentRow + 1, currentColumn + i + 3).Font.Bold = True
                    .Cells(currentRow + 1, currentColumn + i + 3).Font.Name = "Times New Roman"
                    .Cells(currentRow + 1, currentColumn + i + 3).Font.Size = 8
                    .Cells(currentRow + 1, currentColumn + i + 3).HorizontalAlignment = xlCenter
            
                    .Columns(currentColumn + i + 1).Interior.ColorIndex = 1  ' shadow current week and quarter lightgrey - first color in palette
                    .Columns(currentColumn + i + 2).Interior.ColorIndex = 1
                    .Columns(currentColumn + i + 3).Interior.ColorIndex = 1
                    
            'Put in column headings for rest of month in current week
    
                    .Cells(currentRow, currentColumn + i + 4).Value = (theWeekStart + 7) & " Until End " & Format(theWeekStart + 7, "mmmm") & " " & currentYear
                    .Cells(currentRow, currentColumn + i + 4).WrapText = True
                    .Cells(currentRow, currentColumn + i + 4).Font.Bold = True
                    .Cells(currentRow, currentColumn + i + 4).Font.Name = "Times New Roman"
                    .Cells(currentRow, currentColumn + i + 4).Font.Size = 11
                    
                    .Cells(currentRow + 1, currentColumn + i + 4).Value = "Budget"
                    .Cells(currentRow + 1, currentColumn + i + 4).Font.Italic = True
                    .Cells(currentRow + 1, currentColumn + i + 4).Font.Bold = True
                    .Cells(currentRow + 1, currentColumn + i + 4).Font.Name = "Times New Roman"
                    .Cells(currentRow + 1, currentColumn + i + 4).Font.Size = 8
                    .Cells(currentRow + 1, currentColumn + i + 4).HorizontalAlignment = xlCenter
                End With
                
                currentColumn = currentColumn + 3
                
        '*** Put in column headings for rest of months in current quarter, 2 quarters after that (by month)
                monthIncrement = 1
                j = i + 2
                
            '*** Heading: Loop until we've reached end of Budget or passed thru 2 full quarters + remaining of this quarter ***
                Do Until i > numberOfQuarters Or monthIncrement = (8 + DatePart("q", theWeekEnd) * 3 - Month(theWeekEnd) - 1)
                
                    firstDayOfMonth = DateAdd("m", monthIncrement, CDate(Month(theWeekEnd) & "/1/" & Year(theWeekEnd)))
                    currentMonth = Month(firstDayOfMonth)
                    currentYear = Year(firstDayOfMonth)
                    
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + j).Value = "'" & Format(firstDayOfMonth, "mmm yyyy")
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + j).Font.Bold = True
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + j).Font.Name = "Times New Roman"
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + j).Font.Size = 11
                
                    theQuarter = Year(theWeekStart) & DatePart("q", theWeekStart)
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + j).Value = "Budget"
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + j).Font.Italic = True
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + j).Font.Bold = True
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + j).Font.Name = "Times New Roman"
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + j).Font.Size = 8
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + j).HorizontalAlignment = xlCenter
                    
                    monthIncrement = monthIncrement + 1
                    j = j + 1
                    
                    If currentMonth = 1 Or currentMonth = 4 Or currentMonth = 7 Or currentMonth = 10 Then
                            i = i + 1
                    End If
                    
                    If i = numberOfQuarters Then
                        Exit Do
                    End If
                    
                Loop
                
                currentColumn = currentColumn + monthIncrement - 2
                    
                
            Else '***Heading: just a quarter ***
                
                xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).Value = "Q" & Right(aryQuarters(i - 1), 1) & " " & currentYear
                xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).Font.Bold = True
                xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).Font.Name = "Times New Roman"
                xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).Font.Size = 11
                
                theQuarter = Year(theWeekStart) & DatePart("q", theWeekStart)
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).Value = _
                    IIf(Format(theWeekStart, "yyyyq") < aryQuarters(i - 1), "Budget", "Paid")
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).Font.Italic = True
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).Font.Bold = True
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).Font.Name = "Times New Roman"
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).Font.Size = 8
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).HorizontalAlignment = xlCenter
                
            End If
    Loop
    
    currentColumn = currentColumn + i
    
'Print total header column
    
    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Value = "TOTAL"
    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Font.Bold = True
    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Font.Name = "Times New Roman"
    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Font.Size = 11
    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).HorizontalAlignment = xlCenter
    
    currentRow = currentRow + 3
    
    currentColumn = 2
    
    lngProgress = 20
    meterReturn = SysCmd(acSysCmdUpdateMeter, lngProgress)
    
    currentCategoryID = 0
    
    Do Until rstCategory.EOF
    
    'Put in category header if starting a new category
        If rstCategory!CategoryID <> currentCategoryID Then
            currentCategoryID = rstCategory!CategoryID
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, 1).Value = " " & rstCategory!Category
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, 1).Font.Bold = True
            
            currentRow = currentRow + 1
        End If
        
    'List all Budget Items for this category
        xlBudgetSchedule.ActiveSheet.Cells(currentRow, 1).Value = "   " & rstCategory!BudgetName
        xlBudgetSchedule.ActiveSheet.Cells(currentRow, 1).Font.Bold = True
        xlBudgetSchedule.ActiveSheet.Cells(currentRow, 1).Font.Italic = True
        
        currentRow = currentRow + 1
     
        
'Put in total rows for category - only if starting a new category - so need to rstCategory Movenext here

        rstCategory.MoveNext

        
'Using this convoluted way because a straight if then would do second test at eof and cause error

        If rstCategory.EOF Then
            categoryChanged = True
        Else
            categoryChanged = (rstCategory!CategoryID <> currentCategoryID)
        End If
        
        rstCategory.MovePrevious 'go to previous because running total for previous category - because skipped up one to see what next was
        
        If categoryChanged Then
            
    'Total headings
            currentColumn = 1
            
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Value = "  Total Paid "
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Font.Bold = True
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Font.Italic = True
        
            currentRow = currentRow + 1
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Value = "  Total Original Budget "
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Font.Bold = True
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Font.Italic = True
            
            currentRow = currentRow + 1
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Value = "  Total Budget Transfer "
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Font.Bold = True
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Font.Italic = True
        
            currentRow = currentRow + 1
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Value = "  Total Revised Cumulative Budget"
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Font.Bold = True
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn).Font.Italic = True
            
            xlBudgetSchedule.ActiveSheet.Range("A" & currentRow & ":P" & currentRow).Borders(9).LineStyle = 1 'Draw a horizontal line
            
            currentRow = currentRow - 3
        
    '*** Begin totals section  ***
            i = 0
            Do Until i > numberOfQuarters
            
                i = i + 1
            
        'If quarter we are up to is quarter week start is in then break into three(quarter up to, current week, remainder of month)
                If Year(theWeekStart) & DatePart("q", theWeekStart) = aryQuarters(i - 1) Then
                
                    firstDayOfQuarter = CDate((DatePart("q", theWeekStart) * 3 - 2) & "/1/" & Year(theWeekStart)) 'first day of quarter this day lies in
                    firstDayOfMonth = DateAdd("m", 1, theWeekEnd - Day(theWeekEnd) + 1) 'First day of next month
            
            'Paid during quarter up to week end this week
                    sumPayments = DSum("PaymentAmt", "qryPayments", "PaymentDate<= #" & theWeekEnd & "# " & _
                        " And Year(PaymentDate) & DatePart('q', PaymentDate) = '" & aryQuarters(i - 1) & "' And CategoryID=" & rstCategory!CategoryID)
                    
                    originalBudget = DSum("BudgetAmount", "qryBudgetAmounts", "[EffectiveStart] < #" & firstDayOfMonth & "#" & _
                        " And Year(EffectiveStart) & DatePart('q', EffectiveStart) = '" & aryQuarters(i - 1) & _
                            "' And Amendment = False And CategoryID=" & rstCategory!CategoryID)
                            
                    originalBudget = IIf(IsNull(originalBudget), 0, originalBudget)
                            
                            
                    Budget = DSum("BudgetAmount", "qryBudgetAmounts", "EffectiveStart < #" & firstDayOfMonth & "#" & _
                        " And Year(EffectiveStart) & DatePart('q', EffectiveStart) = '" & aryQuarters(i - 1) & _
                            "' And CategoryID=" & rstCategory!CategoryID)
                            
                    Budget = IIf(IsNull(Budget), 0, Budget)
                    budgetTransfer = Budget - originalBudget
                    
                
                'Set Paid total, Budget Original, Budget Transfers
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).Value = _
                                    IIf(IsNull(sumPayments), 0, sumPayments)
                    
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).Formula = _
                                "=" & originalBudget & "*" & DateDiff("d", firstDayOfQuarter, theWeekEnd) / DateDiff("d", firstDayOfQuarter, firstDayOfMonth)
                                
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).Formula = _
                                "=" & budgetTransfer & "*" & DateDiff("d", firstDayOfQuarter, theWeekEnd) / DateDiff("d", firstDayOfQuarter, firstDayOfMonth)
                                
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).BorderAround Weight:=xlMedium
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).BorderAround Weight:=xlMedium
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).BorderAround Weight:=xlMedium
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).BorderAround Weight:=xlMedium
                    
        'current week column
                    currentColumn = currentColumn + 1
            'Actual paid column - up to this week - no longer show for individual encumbrances
                    sumPayments = DSum("PaymentAmt", "qryPayments", "PaymentDate<=#" & theWeekEnd & "# And CategoryID=" & rstCategory!CategoryID)
                        
                
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).Value = sumPayments
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).BorderAround Weight:=xlThick
                
            'Budget to date
                    currentColumn = currentColumn + 1
                    budgetToDateFormula = "=Sum(" & _
                        "B" & currentRow + 1 & ":" & Chr(65 + currentColumn + i - 3) & (currentRow + 2) & ")"
                   
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).Formula = budgetToDateFormula
                    
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).BorderAround Weight:=xlThick
                                
            'Budget - paid
                    currentColumn = currentColumn + 1
       
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).Formula = _
                        "=" & Chr(65 + currentColumn + i - 2) & currentRow + 3 & " - " & Chr(65 + currentColumn + i - 3) & (currentRow + 3)
                    
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).BorderAround Weight:=xlThick
                                
    '*** Totals Section: Remainder of month - ***
                    currentColumn = currentColumn + 1
                    currentMonth = Year(theWeekStart) & DatePart("m", theWeekStart)
                   
                
            'budget for remainder of month
                        
                    originalBudget = DSum("BudgetAmount", "qryBudgetAmounts", "[EffectiveStart] < #" & firstDayOfMonth & "#" & _
                        " And Year(EffectiveStart) & DatePart('q', EffectiveStart) = '" & aryQuarters(i - 1) & _
                            "' And Amendment = False And CategoryID=" & rstCategory!CategoryID)
                            
                    originalBudget = IIf(IsNull(originalBudget), 0, originalBudget)
                            
                            
                    Budget = DSum("BudgetAmount", "qryBudgetAmounts", "[EffectiveStart] < #" & firstDayOfMonth & "#" & _
                        " And Year(EffectiveStart) & DatePart('q', EffectiveStart) = '" & aryQuarters(i - 1) & _
                            "' And CategoryID=" & rstCategory!CategoryID)
                            
                    Budget = IIf(IsNull(Budget), 0, Budget)
                    budgetTransfer = Budget - originalBudget
                            
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).Formula = _
                                "=" & originalBudget & "*" & DateDiff("d", theWeekEnd, firstDayOfMonth) / DateDiff("d", firstDayOfQuarter, firstDayOfMonth)
                                
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).Formula = _
                                "=" & budgetTransfer & "*" & DateDiff("d", theWeekEnd, firstDayOfMonth) / DateDiff("d", firstDayOfQuarter, firstDayOfMonth)
                    
                        
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).Value = _
                                "=" & Budget & "*" & DateDiff("d", theWeekEnd, firstDayOfMonth) / DateDiff("d", firstDayOfQuarter, firstDayOfMonth)
                        
                    
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).BorderAround Weight:=xlMedium
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).BorderAround Weight:=xlMedium
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).BorderAround Weight:=xlMedium
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).BorderAround Weight:=xlMedium
                    
     '*** Totals: Increment by month instead of quarters for rest of quarter and 2 quarters after - will go here ****
                     monthIncrement = 1
                     j = i + 1
                
            '*** Loop until we've reached end of Budget or passed thru 2 full quarters + remaining of this quarter
                        
                    Do Until i > numberOfQuarters Or monthIncrement = (8 + DatePart("q", theWeekEnd) * 3 - Month(theWeekEnd) - 1)
                
                        firstDayOfMonth = DateAdd("m", monthIncrement, CDate(Month(theWeekEnd) & "/1/" & Year(theWeekEnd)))
                        currentMonth = Month(firstDayOfMonth)
                        currentYear = Year(firstDayOfMonth)
                        
                        sumPayments = DSum("PaymentAmt", "qryPayments", "Val(Year(PaymentDate)& DatePart('m', PaymentDate)) = '" & currentYear & currentMonth & _
                            "' And CategoryID=" & rstCategory!CategoryID)
                        
                        sumPayments = IIf(IsNull(sumPayments), 0, sumPayments)
                         
                        quarterBudget = DSum("BudgetAmount", "qryBudgetAmounts", "CategoryID=" & rstCategory!CategoryID & _
                            " And Year(EffectiveStart) & DatePart('m', EffectiveStart) = '" & currentYear & currentMonth & "'")
                        
                        quarterOriginalBudget = DSum("BudgetAmount", "qryBudgetAmounts", "CategoryID=" & rstCategory!CategoryID & _
                            " And Amendment = False And Year(EffectiveStart) & DatePart('m', EffectiveStart) = '" & currentYear & currentMonth & "'")
                            
                        quarterOriginalBudget = IIf(IsNull(quarterOriginalBudget), 0, quarterOriginalBudget)
                        quarterBudget = IIf(IsNull(quarterBudget), 0, quarterBudget)
                        quarterBudgetTransfer = quarterBudget - quarterOriginalBudget
                    
                        xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + j).Value = _
                                    sumPayments
                      
                        xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + j).Value = _
                                quarterOriginalBudget
                                
                        xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + j).Value = _
                                quarterBudgetTransfer
                                
                        xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + j).Value = _
                                quarterBudgetTransfer
                                   
                        xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + j).Value = _
                                quarterBudget
                   
                                
                        xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + j).BorderAround Weight:=xlThin
                        xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + j).BorderAround Weight:=xlThin
                        xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + j).BorderAround Weight:=xlThin
                        xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + j).BorderAround Weight:=xlThin
                
                        monthIncrement = monthIncrement + 1
                        j = j + 1
                        
                        If currentMonth = 1 Or currentMonth = 4 Or currentMonth = 7 Or currentMonth = 10 Then
                            i = i + 1
                        End If
                    
                        If i = numberOfQuarters Then
                            Exit Do
                        End If
                    
                    Loop
                    
                    currentColumn = currentColumn + monthIncrement - 3
                  
               Else
    'Other quarters
                                
                    sumPayments = DSum("PaymentAmt", "qryPayments", "Val(Year([PaymentDate])& DatePart('q', [PaymentDate])) = " & aryQuarters(i - 1) & _
                        " And CategoryID=" & rstCategory!CategoryID)
                        
                    sumPayments = IIf(IsNull(sumPayments), 0, sumPayments)
                         
                    quarterBudget = DSum("BudgetAmount", "qryBudgetAmounts", "CategoryID=" & rstCategory!CategoryID & _
                        " And Year(EffectiveStart) & DatePart('q', EffectiveStart) = '" & aryQuarters(i - 1) & "'")
                        
                    quarterOriginalBudget = DSum("BudgetAmount", "qryBudgetAmounts", "CategoryID=" & rstCategory!CategoryID & _
                        " And Amendment = False And Year(EffectiveStart) & DatePart('q', EffectiveStart) = '" & aryQuarters(i - 1) & "'")
                            
                    quarterOriginalBudget = IIf(IsNull(quarterOriginalBudget), 0, quarterOriginalBudget)
                    quarterBudget = IIf(IsNull(quarterBudget), 0, quarterBudget)
                    quarterBudgetTransfer = quarterBudget - quarterOriginalBudget
                            
                    
            'Paid total, Budget total
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).Value = _
                                    sumPayments
            
                                
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).Value = _
                                quarterOriginalBudget
                                
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).Value = _
                                quarterBudgetTransfer
                                
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).Value = _
                                quarterBudgetTransfer
                                
                   If Year(theWeekStart) & DatePart("q", theWeekStart) < aryQuarters(i - 1) Then 'only print revised cum for future quarters
                                
                        xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).Value = _
                                quarterBudget
                   End If
                                
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).BorderAround Weight:=xlThin
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).BorderAround Weight:=xlThin
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).BorderAround Weight:=xlThin
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).BorderAround Weight:=xlThin
                                
                    'i = i + 1
                                   
                End If
            
            Loop
            
    '***------Total of totals column section -----------------*****
    'set formulas - to just sum across or difference
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).Formula = _
                "=Sum(B" & currentRow & ":" & Chr(64 + currentColumn + i - 1) & currentRow & ")"
                
            xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).Formula = _
                "=Sum(B" & (currentRow + 1) & ":" & Chr(64 + currentColumn + i - 1) & (currentRow + 1) & ")"
                
            xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).Formula = _
                "=Sum(B" & (currentRow + 2) & ":" & Chr(64 + currentColumn + i - 1) & (currentRow + 2) & ")"
                
            xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).Formula = _
                "=Sum(" & Chr(64 + currentColumn + i) & (currentRow + 1) & ":" & Chr(64 + currentColumn + i) & _
                    (currentRow + 2) & ")"
            
        'Draw borders
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).BorderAround Weight:=xlThin
            xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).BorderAround Weight:=xlThin
            xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).BorderAround Weight:=xlThin
            xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).BorderAround Weight:=xlThick
                   
            currentRow = currentRow + 4
        End If
              
        rstCategory.MoveNext
        
    Loop
    
'*** Grand Totals Headings: Put in total rows for whole sheet ***
'*** Grand Total headings
        currentColumn = 1
        
    With xlBudgetSchedule.ActiveSheet
        .Cells(currentRow, currentColumn).Value = " TOTALS"
        .Cells(currentRow, currentColumn).Font.Bold = True
        currentRow = currentRow + 1
        
        .Cells(currentRow, currentColumn).Value = "     Total Paid "
        .Cells(currentRow, currentColumn).Font.Bold = True
        .Cells(currentRow, currentColumn).Font.Italic = True
        
        currentRow = currentRow + 1
        .Cells(currentRow, currentColumn).Value = "     Total Original Budget "
        .Cells(currentRow, currentColumn).Font.Bold = True
        .Cells(currentRow, currentColumn).Font.Italic = True
        
        currentRow = currentRow + 1
        .Cells(currentRow, currentColumn).Value = "     Total Budget Transfer "
        .Cells(currentRow, currentColumn).Font.Bold = True
        .Cells(currentRow, currentColumn).Font.Italic = True
        
        currentRow = currentRow + 1
        .Cells(currentRow, currentColumn).Value = "     Total Revised Cumulative Budget"
        .Cells(currentRow, currentColumn).Font.Bold = True
        .Cells(currentRow, currentColumn).Font.Italic = True
        
        .Range("A" & currentRow & ":P" & currentRow).Borders(9).LineStyle = 1 'Draw a horizontal line
        currentRow = currentRow - 3
    End With
        
    '*** Begin Grand totals section ***
        i = 0
        Do Until i > numberOfQuarters
            
            i = i + 1
            
    '*** If quarter we are up to is quarter week start is in then break into three(quarter up to, current week, remainder of month)
            If Year(theWeekStart) & DatePart("q", theWeekStart) = aryQuarters(i - 1) Then
                
                firstDayOfQuarter = CDate((DatePart("q", theWeekStart) * 3 - 2) & "/1/" & Year(theWeekStart)) 'first day of quarter this day lies in
                firstDayOfMonth = DateAdd("m", 1, theWeekEnd - Day(theWeekEnd) + 1) 'First day of next month
                
            'Paid during quarter up to week end this week
                sumPayments = DSum("PaymentAmt", "qryPayments", "PaymentDate<= #" & theWeekEnd & "# " & _
                        " And Year(PaymentDate) & DatePart('q', PaymentDate) = '" & aryQuarters(i - 1) & "'")
                    
                originalBudget = DSum("BudgetAmount", "qryBudgetAmounts", "[EffectiveStart] < #" & firstDayOfMonth & "#" & _
                        " And Year(EffectiveStart) & DatePart('q', EffectiveStart) = '" & aryQuarters(i - 1) & _
                            "' And Amendment = False ")
                            
                originalBudget = IIf(IsNull(originalBudget), 0, originalBudget)
                            
                            
                Budget = DSum("BudgetAmount", "qryBudgetAmounts", "EffectiveStart < #" & firstDayOfMonth & "#" & _
                        " And Year(EffectiveStart) & DatePart('q', EffectiveStart) = '" & aryQuarters(i - 1) & _
                            "' ")
                            
                Budget = IIf(IsNull(Budget), 0, Budget)
                budgetTransfer = Budget - originalBudget
                    
                
            'Set Paid total, Budget Original, Budget Transfers
                xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).Value = _
                                    IIf(IsNull(sumPayments), 0, sumPayments)
                                    
                'xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).BorderAround Weight:=xlThin
                    
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).Formula = _
                                "=" & originalBudget & "*" & DateDiff("d", firstDayOfQuarter, theWeekEnd) / DateDiff("d", firstDayOfQuarter, firstDayOfMonth)
                                
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).Formula = _
                                "=" & budgetTransfer & "*" & DateDiff("d", firstDayOfQuarter, theWeekEnd) / DateDiff("d", firstDayOfQuarter, firstDayOfMonth)
                                               
                xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).BorderAround Weight:=xlMedium
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).BorderAround Weight:=xlMedium
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).BorderAround Weight:=xlMedium
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).BorderAround Weight:=xlMedium
                                
    '*** Grand Totals: current week column ***
                currentColumn = currentColumn + 1
            'Actual paid column - up to this week - no longer show for individual encumbrances
                sumPayments = DSum("PaymentAmt", "qryPayments", "PaymentDate<=#" & theWeekStart + 6 & "#")
                        
                
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).Value = sumPayments
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).BorderAround Weight:=xlThick
                
            'Budget to date
                currentColumn = currentColumn + 1

                budgetToDateFormula = "=Sum(" & _
                   "B" & currentRow + 1 & ":" & Chr(65 + currentColumn + i - 3) & (currentRow + 2) & ")"
                   
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).Formula = budgetToDateFormula
                    
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).BorderAround Weight:=xlThick
                                
            'Budget - paid
                currentColumn = currentColumn + 1
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).Formula = _
                    "=" & Chr(65 + currentColumn + i - 2) & currentRow + 3 & " - " & Chr(65 + currentColumn + i - 3) & (currentRow + 3)
                    
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).BorderAround Weight:=xlThick
                                
'*** Grand Totals section: Remainder of month ***
                currentColumn = currentColumn + 1
                
            'Prorate budget
               sumPayments = DSum("PaymentAmt", "qryPayments", "PaymentDate<= #" & theWeekEnd & "# " & _
                        " And Year(PaymentDate) & DatePart('q', PaymentDate) = '" & aryQuarters(i - 1) & "'")
                    
                originalBudget = DSum("BudgetAmount", "qryBudgetAmounts", "[EffectiveStart] < #" & firstDayOfMonth & "#" & _
                        " And Year(EffectiveStart) & DatePart('q', EffectiveStart) = '" & aryQuarters(i - 1) & _
                            "' And Amendment = False ")
                            
                originalBudget = IIf(IsNull(originalBudget), 0, originalBudget)
                            
                            
                Budget = DSum("BudgetAmount", "qryBudgetAmounts", "EffectiveStart < #" & firstDayOfMonth & "#" & _
                        " And Year(EffectiveStart) & DatePart('q', EffectiveStart) = '" & aryQuarters(i - 1) & _
                            "' ")
                            
                Budget = IIf(IsNull(Budget), 0, Budget)
                budgetTransfer = Budget - originalBudget
                
                'xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).Value = _
                 '                   IIf(IsNull(sumPayments), 0, sumPayments)
                    
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).Formula = _
                                "=" & originalBudget & "*" & DateDiff("d", theWeekEnd, firstDayOfMonth) / DateDiff("d", firstDayOfQuarter, firstDayOfMonth)
                                
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).Formula = _
                                "=" & budgetTransfer & "*" & DateDiff("d", theWeekEnd, firstDayOfMonth) / DateDiff("d", firstDayOfQuarter, firstDayOfMonth)
                    
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).Formula = _
                    "=" & Budget & "*" & DateDiff("d", theWeekEnd, firstDayOfMonth) / DateDiff("d", firstDayOfQuarter, firstDayOfMonth)
                    
                xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).BorderAround Weight:=xlMedium
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).BorderAround Weight:=xlMedium
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).BorderAround Weight:=xlMedium
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).BorderAround Weight:=xlMedium
                
'*** Grand Totals section: Put in total month columns for rest of months in current quarter, 2 quarters after that (by month)
                monthIncrement = 1
                j = i + 1
                
'*** Grand Totals section: Loop until we've reached end of Budget or passed thru 2 full quarters + remaining of this quarter
                        
                Do Until i > numberOfQuarters Or monthIncrement = (8 + DatePart("q", theWeekEnd) * 3 - Month(theWeekEnd) - 1)
                
                    firstDayOfMonth = DateAdd("m", monthIncrement, CDate(Month(theWeekEnd) & "/1/" & Year(theWeekEnd)))
                    currentMonth = Month(firstDayOfMonth)
                    currentYear = Year(firstDayOfMonth)
                        
                    sumPayments = DSum("PaymentAmt", "qryPayments", "Val(Year(PaymentDate)& DatePart('m', PaymentDate)) = '" & currentYear & currentMonth & _
                            "'")
                        
                    sumPayments = IIf(IsNull(sumPayments), 0, sumPayments)
                         
                    quarterBudget = DSum("BudgetAmount", "qryBudgetAmounts", _
                            " Year(EffectiveStart) & DatePart('m', EffectiveStart) = '" & currentYear & currentMonth & "'")
                        
                    quarterOriginalBudget = DSum("BudgetAmount", "qryBudgetAmounts", _
                            "Amendment = False And Year(EffectiveStart) & DatePart('m', EffectiveStart) = '" & currentYear & currentMonth & "'")
                            
                    quarterOriginalBudget = IIf(IsNull(quarterOriginalBudget), 0, quarterOriginalBudget)
                    quarterBudget = IIf(IsNull(quarterBudget), 0, quarterBudget)
                    quarterBudgetTransfer = quarterBudget - quarterOriginalBudget
                    
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + j).Value = _
                                    sumPayments
                      
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + j).Value = _
                                quarterOriginalBudget
                                
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + j).Value = _
                                quarterBudgetTransfer
                                
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + j).Value = _
                                quarterBudgetTransfer
                                   
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + j).Value = _
                                quarterBudget
                   
                                
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + j).BorderAround Weight:=xlThin
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + j).BorderAround Weight:=xlThin
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + j).BorderAround Weight:=xlThin
                    xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + j).BorderAround Weight:=xlThin
                
                    monthIncrement = monthIncrement + 1
                    j = j + 1
                        
                    If currentMonth = 1 Or currentMonth = 4 Or currentMonth = 7 Or currentMonth = 10 Then
                        i = i + 1
                    End If
                    
                    If i = numberOfQuarters Then
                        Exit Do
                    End If
                    
                Loop
                    
                currentColumn = currentColumn + monthIncrement - 3
                  
                  
            Else
'*** Grand Totals: Other quarters
                                
                sumPayments = DSum("PaymentAmt", "qryPayments", "Val(Year(PaymentDate)& DatePart('q', PaymentDate)) = " & aryQuarters(i - 1))
                         
                quarterBudget = DSum("BudgetAmount", "qryBudgetAmounts", "Year(EffectiveStart) & DatePart('q', EffectiveStart) = '" & aryQuarters(i - 1) & "'")
                    
                    
                quarterOriginalBudget = DSum("BudgetAmount", "qryBudgetAmounts", _
                        "Year(EffectiveStart) & DatePart('q', EffectiveStart) = '" & aryQuarters(i - 1) & _
                            "' And Amendment = False ")
                            
                quarterOriginalBudget = IIf(IsNull(quarterOriginalBudget), 0, quarterOriginalBudget)
                            
                quarterBudget = IIf(IsNull(quarterBudget), 0, quarterBudget)
                quarterBudgetTransfer = quarterBudget - quarterOriginalBudget
                    
'***  Grand Totals: Paid total, Budget total
                xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).Value = _
                                IIf(IsNull(sumPayments), 0, sumPayments)
                                
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).Value = _
                                quarterOriginalBudget
                                
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).Value = _
                                quarterBudgetTransfer
                                
                If Year(theWeekStart) & DatePart("q", theWeekStart) < aryQuarters(i - 1) Then 'only print revised cum for future quarters
                                
                        xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).Value = _
                                quarterBudget
                End If
                                
                xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).BorderAround Weight:=xlThin
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).BorderAround Weight:=xlThin
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).BorderAround Weight:=xlThin
                xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).BorderAround Weight:=xlThin
            End If
            
        Loop
            
'***------Total column of grand totals row section -----------------*****
       'set formulas - to just sum across
        columnLetter = Chr(64 + currentColumn + i - 1)
        xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).Formula = _
                "=Sum(B" & currentRow & ":" & columnLetter & currentRow & ")"
                
        xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).Formula = _
                "=Sum(B" & (currentRow + 1) & ":" & columnLetter & (currentRow + 1) & ")"
                
        xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).Formula = _
                "=Sum(B" & (currentRow + 2) & ":" & columnLetter & (currentRow + 2) & ")"
                
        columnLetter = Chr(64 + currentColumn + i)
                
        xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).Formula = _
                "=Sum(" & columnLetter & (currentRow + 1) & ":" & columnLetter & _
                    (currentRow + 2) & ")"
            
            
'*** Draw borders
            xlBudgetSchedule.ActiveSheet.Cells(currentRow, currentColumn + i).BorderAround Weight:=xlThin
            xlBudgetSchedule.ActiveSheet.Cells(currentRow + 1, currentColumn + i).BorderAround Weight:=xlThin
            xlBudgetSchedule.ActiveSheet.Cells(currentRow + 2, currentColumn + i).BorderAround Weight:=xlThin
            xlBudgetSchedule.ActiveSheet.Cells(currentRow + 3, currentColumn + i).BorderAround Weight:=xlThick
    
    meterReturn = SysCmd(acSysCmdUpdateMeter, 90)
    
    xlBudgetSchedule.ActiveSheet.Range("B1:" & columnLetter & "150").NumberFormat = "#,##0.00_);[Red](#,##0.00)"
'Autofit to hold all numbers and text across
    xlBudgetSchedule.ActiveSheet.Range("A5:" & columnLetter & "150").Columns.AutoFit
    
    'Set Heading to take up full top 3 rows
    xlBudgetSchedule.ActiveSheet.Range("A1:" & columnLetter & "1").Merge
    xlBudgetSchedule.ActiveSheet.Range("A2:" & columnLetter & "2").Merge
    xlBudgetSchedule.ActiveSheet.Range("A3:" & columnLetter & "3").Merge
    xlBudgetSchedule.ActiveSheet.Range("A4:" & columnLetter & "4").Merge
 
    xlBudgetSchedule.ActiveSheet.Range("A6:" & columnLetter & "6").Borders(9).LineStyle = 1 'Draw a horizontal line
  
    
    With xlBudgetSchedule.ActiveSheet.PageSetup
            .Orientation = xlLandscape
            .Zoom = False 'Force to use fit to page
            .FitToPagesWide = 1
            .FitToPagesTall = 5
            .PrintGridlines = False
            .LeftMargin = xlBudgetSchedule.InchesToPoints(0.25)
            .RightMargin = xlBudgetSchedule.InchesToPoints(0.25)
            .TopMargin = xlBudgetSchedule.InchesToPoints(0.25)
            .BottomMargin = xlBudgetSchedule.InchesToPoints(0.25)
            .PrintTitleRows = xlBudgetSchedule.ActiveSheet.Range("A1:A6").Address 'Print the first 6 rows as the header on each sheet
            .PrintArea = "$A$1:" & "$" & columnLetter & "$" & (currentRow + 3)
    End With
    
    meterReturn = SysCmd(acSysCmdUpdateMeter, 100)
    meterReturn = SysCmd(acSysCmdClearStatus)
    
  'Make look like a report
    xlBudgetSchedule.ActiveSheet.Name = "Budget by Category"
    xlBudgetSchedule.ActiveWindow.Caption = "Budget by Category"
    xlBudgetSchedule.Application.Caption = "Budget Cashflow Schedule"
    xlBudgetSchedule.Application.DisplayFormulaBar = False
    xlBudgetSchedule.ActiveWindow.DisplayFormulas = False
    xlBudgetSchedule.ActiveWindow.DisplayHeadings = False
    xlBudgetSchedule.ActiveWindow.DisplayZeros = False
    
    
    ChartBudgetPaymentsCategory
    xlBudgetSchedule.Visible = True

    
End Sub



Public Function ExcelColumnLetters(nColumnNumber As Integer) 
    'Returns the corresponding Excel column letter notation given an excel column number
    Dim cLetterNotation As String
    
    If nColumnNumber <= 26 Then
        cLetterNotation = Chr(64 + nColumnNumber)
    Else
        cLetterNotation = ExcelColumnLetters(nColumnNumber / 26) & ExcelColumnLetters(nColumnNumber Mod 26)
    End If
    
    ExcelColumnLetters = cLetterNotation
    
End Function




Back to Papers and Articles