Правильный синтаксис / статус для поиска файла Excel - PullRequest
0 голосов
/ 17 апреля 2020

Вот то, что я думаю, должно произойти, но это не так. И я чувствую, что это потому, что я не открываю и не активирую рабочую таблицу ... On_Click, я создаю новую рабочую книгу, ** здесь мне может понадобиться открыть рабочую книгу для поиска **, если я найду соответствие для " FLOATP ", копирует строки и записывает в новую рабочую книгу. Это прекрасно работает, если я ищу активную книгу .... Но не что-то на моем рабочем столе (не активен / открыт).

Я собрал программу, которая открывает закрытый wb, выполняет задачу и затем закрывает wb ... Но я не уверен, что смогу заставить его работать с кодом, который у меня есть .. Мысли?

Private Sub CommandButton1_Click()



Dim cell As Range

Workbooks.Add.SaveAs Filename:="test42"



   For Each cell In Workbooks("[C:\Users\32768\Desktop\2019oseDist.xlsb]").Range("EI2:EI60000")



      If InStr(cell.Value, "FLOATP") > 0 Then



        MsgBox "The name of the active sheet is " & ActiveSheet.Name

        cell.EntireRow.Copy

        ActiveSheet.Range("A25").End(xlUp).Select

        Selection.Offset(1, 0).Select

        ActiveSheet.Paste



     End If



   Next cell



End Sub

1 Ответ

0 голосов
/ 17 апреля 2020

Вы можете читать из закрытой рабочей книги. Но ваш код пытается пролистать тысячи строк, что означает тысячи операций чтения. Это не эффективно.

Посмотрите на столбец ячеек как массив. Когда вы проводите l oop через ячейки, вы используете массив, созданный Excel. Если вы копируете эти ячейки в созданный вами массив, вам не нужно обращаться к массиву Excel. Дело в том, что каждый доступ к массиву Excel медленный, а каждый доступ к вашему - быстрый. Но копирование одного из массивов Excel в один из ваших является простым доступом, а также очень быстрым.

Это приводит к идее получить доступ к закрытой книге только один раз, извлечь огромный массив и скопировать его в один настроить в своем собственном коде. Вы можете эффективно выполнять цикл без дальнейшей ссылки на источник.

Как только вы найдете «FLOATP», вы можете либо снова получить доступ к закрытой книге, чтобы извлечь другой диапазон, на этот раз строку, которую вы теперь можете идентифицировать. Или вы могли бы взять весь лист в первом чтении. Огромный объем данных, которые вы загружаете в массив, не должен беспокоить вас сам по себе. Но вы можете sh запустить сравнительные тесты скорости.

Также подумайте, что вам нужно извлечь. Скопированные массивы быстрые, потому что они содержат только значения. Если вам нужно также получить форматы из закрытого источника, копирование приобретает другое значение. Я не рекомендовал бы копировать многие тысячи различных ячеек в массив ячеек - фактически весь лист. Возможно, вам не нужно форматировать для начального поиска, но вы должны рассмотреть возможность использования метода Find вместо l oop.

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