Ускорьте код VBA при сборе данных из папки рабочих книг - PullRequest
0 голосов
/ 09 января 2020

Мой код VBA очень медленный. Я думаю, что это активация рабочих таблиц при сборе данных из всех рабочих книг в папке, состоящей из рабочих книг с аналогичной структурой данных.

Dim wkbDest As Workbook
Set wkbDest = ThisWorkbook
ChDir strPath
strExtension = Dir("*.xls*")
strPath = 'path_to_folder'
Do While strExtension <> ""
    Set wkbSource = Workbooks.Open(strPath & strExtension)
    With wkbSource
        ...
        Set rng = Sheets("Inputs").Range("C9:C14")
        j = 0
        For Each cell In rng
            wkbDest.Sheets("Data_collection").Cells(3 + count + j, 9) = cell
            j = j + 1
        Next cell

        Application.CutCopyMode = False
        .Close SaveChanges:=False

    End With
    strExtension = Dir
Loop

1 Ответ

0 голосов
/ 09 января 2020

Есть несколько вещей:

  1. Повернуть приложение. Экран обновить до значения false
  2. Повернуть приложение. Расчет до xlCalculationManual
  3. Свести к минимуму количество операций (копирование одной ячейки 1000 раз будет медленнее, чем копирование 1000 ячеек за один раз)

    В вашем случае вы можете скопировать все ячейки одновременно, как показано ниже:

destWorksheet.Range("C9:C14").Offset(count*5,0).Value2 = srcWorksheet.Range("C9:C14").Value2

'Offset depends on the size of your input (I assume you do a simple copy here)

PS : здесь вам не нужна эта строка Application.CopyCutMode = false. Вы не используете методы копирования / вставки.

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