Excel: Может ли использование внешних ссылок повысить производительность?
Мне интересно, есть ли прирост производительности при использовании внешних ссылок по сравнению с открытием электронной таблицы и копированием ячеек (с использованием VBA).
Я полагаю, что Excel должен открыть файл точно так же, но когда я тестирую с использованием следующего кода, внешние ссылки появляются быстрее:
Dim t As Double
Dim rng As Range
For Each rng In shtId.Range("A1:A5")
t = Now
ThisWorkbook.Names("rngID").RefersToRange = rng
ThisWorkbook.UpdateLink "H:\manualData.xlsx", xlExcelLinks
Debug.Print "link: " & Format(Now - t, "######.0000000")
t = Now
Workbooks.Open "H:\manualData.xlsx", readonly:=True
ActiveWorkbook.Close False
Debug.Print "open: " & Format(Now - t, "######.0000000")
Next
Results:
link: .0000116
open: .0000231
link: .0000116
open: .0000347
link: .0000000
open: .0000347
link: .0000000
open: .0000347
link: .0000000
open: .0000347
В рабочей книге есть несколько ячеек с формулами поиска, введенными в поле идентификатора. Эти формулы имеют внешние ссылки. Чтобы проверить это, я меняю идентификатор и форсирую обновление. Чтобы проверить подход к открытию файла, я просто открываю и закрываю исходный файл.
Я рассчитываю ускорить процесс, в котором возникают проблемы из-за низкой пропускной способности сети. Я уже изучил различные варианты и просто хотел бы понять, является ли это правильным. Я искал эту тему, и некоторые люди говорят, что внешние ссылки могут вызвать проблемы с производительностью, а другие говорят иначе. Я хотел бы получить лучшее представление о механизме внешних ссылок, чтобы я мог понять, чего ожидать при реализации.
Какие-нибудь мысли?
1 ответ
Это намного больше работы, но чтение / запись данных из / в файл XML (с использованием MSXML) решит проблему производительности. Это маршрут, который я был вынужден принять при определенных обстоятельствах, когда пропускная способность была низкой.
Скорость, с которой VBA может извлекать данные и выполнять расчеты, намного быстрее, чем использование нескольких ссылок. В зависимости от обстоятельств; Вы можете сделать это на событии открытия рабочей книги или даже на определенном событии изменения (ComboBox и т. д.), поскольку вы работаете только с килобайтом данных.