Мой макрос VBA занимает слишком много времени и слишком медленный - PullRequest
0 голосов
/ 28 марта 2019

Мне нужно написать простой макрос в Excel с именем «refresh», который выполняет следующие действия:

  1. очищает текущий лист
  2. он перебирает все файлы Excel в указанномпапка.Каждый файл содержит только один лист
  3. . Он объединяет содержимое всех этих листов в один лист, просто добавляя их рядом друг с другом в файле назначения
  4. , когда изменяется любой из исходных файлов.ничего не должно происходить в файле назначения, пока макрос 'refresh' не будет вызван снова

Я написал некоторый код, который работает нормально.Однако у него есть две проблемы:

  1. Он работает очень медленно, я уверен, что должен быть более быстрый подход
  2. Все файлы, с которых я читаю, больше не могут быть изменены, пока я не закрою иreopen excel

Поскольку я совершенно новичок в vba, я хотел бы попросить помощи в устранении этих проблем

Вот код, который я пробовал:


    Dim ExcelObj As Object
    Dim ExcelBook As Object
    Dim ExcelSheet As Object

    Cells.ClearContents


    Path = ThisWorkbook.Path & "\Sources\"
    File = Dir(Path & "*.xls*")
    Idx = 1

    RowIdx = 3


    Set ExcelObj = CreateObject("Excel.Application")
    Do Until File = ""

        ExcelObj.Workbooks.Open Path & File
        Set ExcelBook = ExcelObj.Workbooks(1)
        Set ExcelSheet = ExcelBook.Worksheets(1)

        If Idx = 1 Then
            Offset = 0
        Else
            Offset = 1
        End If

        nr = ExcelSheet.UsedRange.Rows.Count
        nc = ExcelSheet.UsedRange.Columns.Count

        tmp = ExcelSheet.Range(Cells(1 + Offset, 1).Address(), Cells(nr, nc).Address()).Value
        Range(Cells(RowIdx, 1).Address(), Cells(RowIdx + nr - 1 - Offset, nc).Address()).Value = tmp
        RowIdx = RowIdx + nr - Offset

        File = Dir
        Idx = Idx + 1

        Set ExcelSheet = Nothing
        Set ExcelBook = Nothing

    Loop
    Set ExcelObj = Nothing

Как упоминалось ранее, код работает нормально, по крайней мере, насколько я мог видеть в моих тестах.Однако он довольно медленный и не высвобождает прочитанные файлы.

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