VBscript оптимизирует поиск и удаление Excel - PullRequest
0 голосов
/ 04 октября 2018

У меня есть функция VBScript, которую я смог создать, которая открывает файл Excel, указанный пользователем, и начинает анализировать столбец C Листа 3, чтобы увидеть, что это за категория.Если категория не «Фрукты», я хочу удалить всю строку.Функция работает как задумано.Тем не менее, я заметил, насколько он неэффективен (занимает около 3 секунд на 100 строк), и мне нужно иметь возможность сканировать почти 11 000 строк.Есть ли способ, которым я могу оптимизировать поиск так, чтобы все записи проходили всего за несколько секунд?

   Function prepFile(usrFileSelected)
        Set objExcel = CreateObject("Excel.Application")
        Set objWorkbook = objExcel.Workbooks.Open(usrFileSelected)
        objExcel.Sheets("Sheet3").Activate
        intRow = 2
        maxRow = objExcel.ActiveSheet.UsedRange.Rows.Count
        Do while intRow <= 1000
            currentValue = objExcel.Cells(3,intRow).value

            If currentValue <> "Fruit" then
                objExcel.Rows(intRow).EntireRow.Delete
            End If
            intRow = intRow + 1 
        Loop
        msgbox("Done")
        objWorkbook.Save
        objWorkbook.Close
    End Function

1 Ответ

0 голосов
/ 06 октября 2018

Моя первая попытка будет с обновлением экрана отключено:

Sub prepFile(usrFileSelected)
    Dim Excel, Row

    Set Excel = CreateObject("Excel.Application")
    Excel.ScreenUpdating = False

    With Excel.Workbooks.Open(usrFileSelected)
        For Each Row In .Sheets("Sheet3").UsedRange.Rows
            If Row.Cells(3).Value <> "Fruit" Then Row.EntireRow.Delete
        Next
        .Save
        .Close
    End With

    Excel.Quit
End Sub

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

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