Страницы: 1
RSS
Связь между книгами Excel очень долго обновляется
 
В одной книге есть формулы на другую книгу:
Код
='C:\Users\User\Desktop\[Имя_книги.xlsm]Имя_листа!F7
Таких формул в книге около 300 тысяч.
Если книга-источник закрыта, то не дождёшься окончания обновления связей.

Это нормальное поведение программы "Excel" или что-то другое влияет?
Изменено: Скрипт - 01.07.2013 04:23:15
 
Я думаю что при закрытой книге эксель на каждую связь открывает и закрывает книгу.
 
300 000 это круто! ))
 
Hugo, мне тоже почему-то такая мысль пришла.


Юрий М, почему круто? Начиная с "Excel 2007" на листе очень много строк и столбцов и 15 000 строк на 20 столбцов разве это много?

Начиная с "Excel 2007", на листе 1 млн. строк.
Изменено: Скрипт - 30.06.2013 23:01:19
 
Круто - это я про количество формул)))
 
Юрий М, вообще-то, если сравнивать с количеством строк и столбцов на листе, начиная с "Excel 2007", 300 тысяч формул - это чуть-чуть должно быть. Даже для "Excel 2003" - это тоже чуть-чуть.
Изменено: Скрипт - 30.06.2013 23:04:31
 
Так... порядок уже поменялся))
 
Скрипт, в чем проблема-то? Замените ВСЕ формулы на один макрос пересчета. И спите спокойно.  :D
Я сам - дурнее всякого примера! ...
 
Как-то в 2003 было много ссылок на 1000 файлов - эксель вообще слетал.
Сделал между ними 3 файла, которые разделили связи между собой, а уже последний файл ссылался на эти 3 файла. Стало нормально. С чем это связано до сих пор не знаю, но факт.
 
KuklP, во-первых, для общего развития. Первый раз столкнулся с таким, поэтому не знаю - в программе "Excel" дело или в чём-то другом.

Во-вторых, я же ситуацию не обрисовал, я просто конкретно по связи книг с помощью формул тему хотел обсудить. Я в Гугле сделал запрос, но не нашёл ответа.
 
Так пропишите на открытие книги макрос, открывающий ту вторую книгу - и забудьте о проблеме.
Если конечно пересчёт не наступает раньше... Не проверял.
Изменено: Hugo - 30.06.2013 23:32:44
 
Hugo, в этой теме именно обсуждается явление "связи между книгами в Excel с помощью формул". Более подробно я не стал описывать задачу - это нужно другую тему создавать.
Изменено: Скрипт - 30.06.2013 23:43:01
 
имхо:
теоретически в одном файле Excel может быть ещё больше формул-ссылок на внешние файлы, чем 300.000

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

вообще - давно известно: то, что возможно теоретически, не всегда стоит делать практически. для этого не нужно "знать Excel". достаточно капельки здравого смысла, грамотного эксперимента и правильных выводов из такого эксперимента.
вывод из вашего "эксперимента" может быть только один:
решение с 300.000 формул, ссылающихся на другой (закрытый) файл - это плохое решение.
ищите другое.
(как варианты - объединить книги в одну; всегда открывать книгу-источник перед открытием книги-приемника; отказаться от формул и обновлять значения макросом; перейти на Access или др. БД)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Скрипт, ну у вас же один ник чего стоит! Я и намекал на это. :D
Я сам - дурнее всякого примера! ...
 
Ребят, ну чего набросились на человека? Он сам понимает, что с макросами будет быстрее)) Его интересует причина - хочет разобраться. Вот и всё.
 
Цитата
Юрий М пишет: хочет разобраться.
А-аа. Т.е. просто простить и принять? Тогда да. Гы)  :D
Я сам - дурнее всякого примера! ...
 
Юрий М, я честно говоря, не знаю как решается та проблема, что есть, оптимальными средствами. В этой теме просто хотел узнать, что действительно так долго обновляется связь с закрытой книгой-источником или нет.

Я стараюсь в первую очередь использовать средства самой программы, а затем уже макросы применять.

Это получается, что для каждой формулы происходит открытие и закрытие книги-источника. Это ведь явная недоработка программистов из "Microsoft". Если формул около 300 тысяч, то файл будет открыт и закрыт 300 тысяч раз.
 
> что действительно так долго обновляется связь с закрытой книгой-источником или нет?

Да

> Это ведь явная недоработка программистов из "Microsoft"

Скорее недооценка Вами возможных проблем, которые при этом могли бы возникнуть  :)
Ссылки в общем случае могут быть и на различные файлы, а открыть одновременно все невозможно в силу ограничений операционной системы (не более 16384 для WinXP).
И под открытием файла здесь подразумевается не штатная загрузка книги в excel, а открытие дескриптора файла и чтение данных посредством какого-нибудь интерфейса типа ODBC.

Судя по всему, выбранные Вами средства решения не очень адекватны решаемой задаче.
Несмотря на то, что Excel позволяет заполнять все ячейки листа и столько листов, сколько позволяет память, никому же не приходит в голову идея действовать подобным образом.

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

Код
' Код модуля ЭтаКнига
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Me.UpdateLinks = xlUpdateLinksNever
End Sub

Private Sub Workbook_Open()
  Dim x
  On Error Resume Next
  Application.ScreenUpdating = False
  For Each x In Me.LinkSources(xlExcelLinks)
    Workbooks.Open(Filename:=x, UpdateLinks:=False, ReadOnly:=True).Close False
  Next
  Me.Activate
  Application.ScreenUpdating = True
End Sub
Изменено: ZVI - 01.07.2013 03:26:29
 
Ну вот. Я только предложил, а Володя уже и готовое решение выложил. Только я имел ввиду пересчет по команде. И не всего листа, а заполненного диапазона  :D
Я сам - дурнее всякого примера! ...
Страницы: 1
Наверх