Последние несколько дней я играл с Excel, чтобы разобраться с VBA.Я пытаюсь создать простой лист, который использует VBA и делит мои продажи в месяц.
Я написал некоторый код, который будет автофильтр список акций и копирует каждую проданную запись за конкретный месяц и вставляет в лист с соответствующим названием (названный по месяцам).Мой код приведен ниже.
Кто-нибудь знает, почему перед запуском скрипта рабочая книга составляет 54 КБ.Затем, когда я запустил скрипт и 9 записей были разделены на соответствующий месяц, размер файла теперь составляет 23 Мб?
Sub populate_months()
Dim Months As Collection
Dim Month As Variant
Dim itemcost As Long, turnover As Long, expenses As Long, profit As Long
'Create unique Months using GeoUniqueValues function
Set Months = GetUniqueValues(ThisWorkbook.Sheets("Stock").Range("I2:I999").Value)
For Each Month In Months
'This is for the next version where It will only create sheets when there is data for them.
'If WorksheetExists(Month) = False Then
'Sheets.Add(After:=Sheets(Sheets.Count)).Name = Month
'Sold Data
ThisWorkbook.Sheets("Stock").Activate
With ThisWorkbook.Sheets("Stock")
.AutoFilterMode = False
With .Range("A1", "J1000")
.AutoFilter Field:=9, Criteria1:=Month, VisibleDropDown:=False
.Range("A1", Range("C1").End(xlDown)).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets(Month).Range("A2")
End With
End With
ActiveSheet.AutoFilterMode = False
'Expenses Data
ThisWorkbook.Sheets("Expenses").Activate
With ThisWorkbook.Sheets("Expenses")
.AutoFilterMode = False
With .Range("A1", "D1000")
.AutoFilter Field:=4, Criteria1:=Month, VisibleDropDown:=False
.Range("A1", Range("C1").End(xlDown)).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets(Month).Range("D2")
End With
End With
ActiveSheet.AutoFilterMode = False
'Format the Month sheet
ThisWorkbook.Sheets(Month).Activate
itemcost = Application.Sum(ActiveSheet.Range("B3", ActiveSheet.Range("B3").End(xlDown)))
turnover = Application.Sum(ActiveSheet.Range("C3", ActiveSheet.Range("C3").End(xlDown)))
expenses = Application.Sum(ActiveSheet.Range("F3", ActiveSheet.Range("F3").End(xlDown)))
profit = turnover - (itemcost + expenses)
ActiveSheet.Range("I3").Value = "Turn over (£)"
ActiveSheet.Range("J3").Value = turnover
ActiveSheet.Range("I4").Value = "Profit (£)"
ActiveSheet.Range("J4").Value = profit
ActiveSheet.Cells.Select
ActiveSheet.Cells.EntireColumn.AutoFit
Next Month
ThisWorkbook.Worksheets("Stock").Activate
ActiveSheet.AutoFilterMode = False