Когда Excel VBA читает данные из закрытой книги, не открывая ее, что именно он делает? - PullRequest
1 голос
/ 28 апреля 2019

Следующий код Excel VBA считывает данные из файла, не открывая его:

Dim rgTarget As Range
Set rgTarget = ActiveSheet.Range("A1:C3") 'where to put the copied data.
rgTarget.FormulaArray = "='C:\MyPath\[Closed File.xlsx]Sheet1'!$A$1:$C$3"
rgTarget.Formula = rgTarget.Value 'convert formulas to values.

Даже если я помещаю в файл очень большое количество дополнительных данных, поэтому для открытия через файл требуется 25 секунд> Open or Workbooks.Open, этот код по-прежнему выполняется практически мгновенно и получает правильные данные.

Мой коллега настаивает на том, что если он успешно читает данные из файла, то ipso facto должен открывать файл.Но очевидно, что он делает что-то другое, чем Workbooks.Open.

Дело не в кэшировании;даже если я перезагружаю Windows, затем запускаю Excel и запускаю этот код перед открытием большого файла, он все равно работает почти мгновенно и получает правильные данные.И независимо от того, сколько раз я открываю большой файл с помощью меню «Файл»> «Открыть» или «Workbooks.Open», каждый раз это занимает 25 секунд.

Также FWIW, когда я открываю большой файл с помощью Workbooks.Open или «Файл»> «Открыть».Диспетчер задач показывает увеличение использования памяти Excel примерно на 154 000 КБ, что почти в четыре раза увеличивает общее использование памяти в Excel.Но выполнение приведенного выше кода показывает лишь незначительное увеличение использования памяти Excel, около 12 КБ.Файл занимает около 29 КБ на жестком диске (файлы Excel сжимаются при сохранении).

...