VBA Performance - PullRequest
       1

VBA Performance

0 голосов
/ 07 октября 2019

Я пишу некоторый код для разделения листа Excel по определенному столбцу на отдельные рабочие книги. Мой код работает, но очень медленно (он должен создавать 28 отдельных файлов и занимает около 10 минут на файл). Что я могу сделать, чтобы он работал лучше? Есть ли способ сэкономить время расчета?

Sub Split()

Dim wswb As String
Dim wssh As String
Dim path As String

Worksheets("Sheet1").Activate

wswb = ActiveWorkbook.Name
wssh = ActiveSheet.Name

path = Worksheets("Start").Range("H6").Value

Columns("H").Copy
Worksheets("Settings").Activate

Range("A1").PasteSpecial
Columns("A").RemoveDuplicates Columns:=1, Header:=xlYes

vCounter = Range("A" & Rows.Count).End(xlUp).Row

For i = 2 To vCounter

    vFilter = Sheets("Settings").Cells(i, 1)
    Sheets(wssh).Activate
    ActiveWorkbook.Worksheets("Sheet1").AutoFilterMode = False
    ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=8, Criteria1:=vFilter
    Cells.Copy
    Workbooks.Add
    Range("A1").PasteSpecial
    Worksheets("Sheet1").Name = "OTD"
    Sheets.Add After:=ActiveSheet
    ActiveCell.FormulaR1C1 = ""
    Sheets("Sheet2").Select
    Sheets("Sheet2").Name = "PPM"
    Sheets("OTD").Select
    If vFilter <> "" Then
        ActiveWorkbook.SaveAs path & "OTD_PPM_Report_" & Format(DateSerial(Year(Date), month(Date) - 1, 1), "mmm_yyyy") & "_" & Range("I2").Value & ".xlsx"
    End If
    ActiveWorkbook.Close
    Workbooks(wswb).Activate
Next i

ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=8

End Sub

1 Ответ

0 голосов
/ 07 октября 2019

В целом я предпочитаю использовать:

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

для повышения производительности каждый раз, когда имеешь дело с файлами Excel. Я также использую:

Application.Visible = False

, который, как я считаю, также увеличивает скорость.

Это всего лишь общие замечания.

Ps. Также старайтесь избегать Activate / Select (это может помочь Как избежать использования Select в Excel VBA )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...