Обновление связей excel макросом

Добрый день!

У меня аналогичная задача, обновлять связи из других файлов (около сотни). Только, мне кажется, немного сложнее.

Есть файлы с данными за день, каждый отдельный файл типа: 01.12.2013.xls, 02.12.2013.xls и т.д.
Так же есть сводная месячная таблица типа: Декабрь.xls., где собираются данные за месяц из файлов по дням.

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

Естественно, что при открытии сводного файла Декабрь.xls. происходит обновление связей, и возникают ошибки, т.к. некоторых файлов еще нет. Пользователь ошибку игнорирует. И сводная таблица берет только данные из тех файлов, которые уже есть в наличии.

Использую Excel 2003.

Задача, периодически (скажем раз в 3 часа), обновлять связи и игнорировать возникающие ошибки.

И если появились новые файлы брать из них данные. Если делаю руками через меню: Правка >> Связи >> Обновить, так же возникает ошибка из-за отсутствующих файлов. Я её игнорирую, и все работает как надо.

В макросах я вообще не силен. Пытался делать макрос такого же типа как ВикторЧерный и запускать его вручную. Но макрос почему-то не обновляет данные из новых файлов. Он натыкается на первую же ошибку и останавливается.

Например, есть следующие файлы:
01.12.2013.xls
02.12.2013.xls
04.12.2013.xls
05.12.2013.xls
При открытии сводного файла Декабрь.xls, Excel актуализирует данные из всех доступных для чтения, в данный момент, файлов.

При выполнении макроса, обновляются только данные из файлов: 01.12.2013.xls и 02.12.2013.xls
А данные из файлов: 04.12.2013.xls и 05.12.2013.xls уже не актуализируются.

Решение, которое предложил Boroda у меня не работает.

Пробовал так же макрос, который бы открывал и снова открывал сводный файл. Но он тоже не работает. А кроме того его надо размещать в отдельном файле, что тоже не очень удобно.

Пробовал создавать файлы-пустышки. Чтобы не было ошибок. Но тогда почтовая программа не замещает уже существующие файлы и в сводную таблицу вообще ничего не попадает.

В общем, задача, у меня написать макрос, который будет через интервал времени автоматически актуализировать данные из внешних файлов. И игнорирую возникающие ошибки, проверять на доступность все существующие ссылки.

Посоветуйте, пожалуйста, что можно сделать!

Skip to content

Как обновить все связи в открытых книгах

На чтение 2 мин. Просмотров 4.2k.

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

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как работает это код
  4. Как использовать

Как макрос работает

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

Код макроса

Private Sub Workbook_Open()
'Используйте метод RefreshAll
Workbooks(ThisWorkbook.Name).RefreshAll
End Sub

Как работает это код

В данном макросе мы используем объект ThisWorkbook. Этот объект представляет собой простой и безопасный способ, чтобы указать на текущую книгу. Существует разница между Thisworkbook и ActiveWorkbook.

  • Объект ThisWorkbook ссылается на книгу, которая содержит
    код.
  • Объект ActiveWorkbook относится к книге, которая в данный момент активна.

Они часто возвращают один и тот же объект, но если рабочая книга работает с кодом из неактивной рабочей книги, они возвращают различные объекты. Если вы не хотите случайно обновлять связи в других книгах, используете ThisWorkbook.

Как использовать

Для реализации этого макроса, вам нужно скопировать и вставить его в окно кода события Workbook_Open. Размещение макроса там позволяет ему запускаться каждый раз при открытии рабочей книги.

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. В окне проекта, найти свой проект / имя рабочей книги и нажмите на знак плюс рядом с ней, чтобы увидеть все листы.
  3. Нажмите кнопку ThisWorkbook.
  4. Выберите Открыть событие в Event раскрывающемся списке.
  5. Введите или вставьте код во вновь созданном модуле.

Добрый день всем! Есть вроде бы простая задача, которую мне никак не удается решить.

Есть несколько книг: первая книга — самая простая, простой «справочник», наименование товара и его цена на сегодняшний день (под сотню-другую строк). Эта книга вручную корректируется довольно часто (цены же растут). Назовем ее Книга №1.

Второй тип книги — «основной расчет», в книге несколько Листов. На этих Листах формулы ссылаются на Первую книгу и содержат формулы «ВПР», ну то есть поиск цены для конкретного товара.

Книг второго типа несколько, в каждой — десятки Листов, на каждом Листе — сотни формул. Назовем эти книги «Книги №2.1, 2.2, 2.3 и т.д.)

И есть третий тип Книги. Я назвал ее «сводная». Она собирает во всех Книг второго типа данные. Формулы очень сложные. С помощью этого форума я смог сделать формулу практически универсальной вида ИНДЕКС (ПОИСКПОЗ…. ; ПОИСКПОЗ;….). Учитывая, что путь к файлам находится на сервере, типа X:Каталог номер 1Каталог номер 2[Название книги номер 1]Лист такой-то!…и так далее, формула с трудом умещается на 2 строчках. Но не суть. Назовем ее Книга №3.

Проблема: Книга третьего типа (№3) при открытии НЕ учитывает изменение данных в Книге №1. Чтобы результаты расчетов стали актуальными нужно открыть каждую Книгу 2.1…..2.10, ничего не меняя в ней сохранить её. И тогда уже открывать Книгу №3.

В принципе, наверное, это логично. С точки зрения Excel 2013. Но капец как неудобно.

Основная цель: чтобы после изменения значений цены в Книге №1 (и её закрытия) значения в Книге №3 были актуальными БЕЗ необходимости открывать Книги №2.1….2.10.

Я тут основательно погуглил «обновление связей макросом». Даже попробовал внедрить в Книгу №3 эти макросы. Разные. Результат нулевой. Что сделал:

1. В Книге №3 поставил при открытии Книги «Не задавать вопрос и обновлять связи».
2. В Книгах №2.1…2.10 сделал то же самое.
3. Попытался в Книгу №3 разные макросы вставлять. Тут самое трудное, т.к. я вообще ничего не понимаю в VBA. Всё, что могу — тупо скопипастить код.

Я нашел вот такие:

Первый — обновляет каждые x минут/секунд. Я сделал каждые 2 секунды. Результат — счетчик в ячейке X1 тикает, макрос работает, но

Код
Sub go_()
    Up_
End Sub
Sub Up_()
    Dim tn_
    ActiveWorkbook.RefreshAll
    tn_ = TimeSerial(Hour(Now) + 0, Minute(Now), Second(Now) + 2)
    Range("X1") = Range("X1") + 1
    Application.OnTime tn_, "Up_"
End Sub

И второй, вроде как должен решить мою задачу, но увы. Ничего не меняется. Кстати, скопировал сюда макрос и только что увидел, что расширение стоит .xls, а у меня все файлы .xlsx, и у Книги №3 .xlsm (из-за макросов), может быть причина в этом? Щас попробую … А, всё, увидел — там звездочка в конце.

Код
Sub update()
With Application 'операции с приложением/отключаем для повышения скорости работы макроса
.ScreenUpdating = False 'обновление экрана
.DisplayAlerts = False 'вывод системных сообщений
Папка = "C:тест"
'------------ Excel-файлы в этой папке ------------------
Имя = Dir(Папка & "*.xls*")
Do While Имя <> ""
With .Workbooks.Open _
(Filename:=Папка & Имя, UpdateLinks:=True)
'здесь Ваш макрос делает свое грязное дело
.Close SaveChanges:=True
End With
Имя = Dir
Loop
.ScreenUpdating = True 'обновление экрана
.DisplayAlerts = True 'вывод системных сообщений
End With
End Sub

Все эти коды я нашел на просторах инета, автор их — не я.

upd: изменил отображение кода

  1. Что делает макрос
  2. Код макроса
  3. Как работает макрос
  4. Как использовать
  5. Скачать файл

Ссылка на это место страницы:
#zadacha

Ваш Excel-файл может иметь подключения к внешним источникам данных (веб-запросы, соединений MSQuery, сводные таблицы и так далее). В этих случаях было бы полезным иметь возможность автоматически обновить все связи в открытых книгах. Этот макрос представляет собой простой сценарий, который использует метод RefreshAll. Этот метод обновляет все связи в данной книге или на листе. Мы указываем всю книгу. 

Ссылка на это место страницы:
#formula

  1. Private Sub Workbook_Open()
  2. Workbooks(ThisWorkbook.Name).RefreshAll
  3. End Sub

Ссылка на это место страницы:
#kak

В данном макросе мы используем объект ThisWorkbook. Этот объект представляет собой простой и безопасный способ, чтобы указать на текущую книгу. Существует разница между Thisworkbook и ActiveWorkbook

— Объект ThisWorkbook ссылается на книгу, которая содержит код. 

— Объект ActiveWorkbook относится к книге, которая в данный момент активна. 

Они часто возвращают один и тот же объект, но, если рабочая книга работает с кодом из неактивной рабочей книги, они возвращают различные объекты. Если вы не хотите случайно обновлять связи в других книгах, используете ThisWorkbook

Ссылка на это место страницы:
#touse

Для реализации этого макроса, вам нужно скопировать и вставить его в окно кода события Workbook_Open. Размещение макроса там позволяет ему запускаться каждый раз при открытии рабочей книги. 

1. Активируйте редактор Visual Basic, нажав ALT + F11
2. В окне проекта найдите свой проект/имя рабочей книги и нажмите на знак плюс рядом с ним в чтобы увидеть все листы и модуль ЭтаКнига
3. Правой кнопкой мыши нажмите на модуле ЭтаКнига и выберите View Code 
4. В левой верхней части окна выберите объект WorkBook (Excel автоматом предложит написать макрос для события Workbook_Open, если нет, то выполните п.5 
5. В правом верхнем выпадающем списке выберите событие Open

Ссылка на это место страницы:
#file

Файлы статей доступны только зарегистрированным пользователям.

1. Введите свою почту

2. Нажмите Зарегистрироваться

3. Обновите страницу
Вместо этого блока появится ссылка для скачивания материалов.

Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель — помочь вам эффективнее работать в Excel. 

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

Подписывайтесь на нас в соц.сетях:

У меня аналогичная задача, обновлять связи из других файлов (около сотни). Только, мне кажется, немного сложнее.

Есть файлы с данными за день, каждый отдельный файл типа: 01.12.2013.xls, 02.12.2013.xls и т.д.
Так же есть сводная месячная таблица типа: Декабрь.xls., где собираются данные за месяц из файлов по дням.

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

Естественно, что при открытии сводного файла Декабрь.xls. происходит обновление связей, и возникают ошибки, т.к. некоторых файлов еще нет. Пользователь ошибку игнорирует. И сводная таблица берет только данные из тех файлов, которые уже есть в наличии.

Использую Excel 2003.

Задача, периодически (скажем раз в 3 часа), обновлять связи и игнорировать возникающие ошибки.

И если появились новые файлы брать из них данные. Если делаю руками через меню: Правка >> Связи >> Обновить, так же возникает ошибка из-за отсутствующих файлов. Я её игнорирую, и все работает как надо.

В макросах я вообще не силен. Пытался делать макрос такого же типа как ВикторЧерный и запускать его вручную. Но макрос почему-то не обновляет данные из новых файлов. Он натыкается на первую же ошибку и останавливается.

Например, есть следующие файлы:
01.12.2013.xls
02.12.2013.xls
04.12.2013.xls
05.12.2013.xls
При открытии сводного файла Декабрь.xls, Excel актуализирует данные из всех доступных для чтения, в данный момент, файлов.

При выполнении макроса, обновляются только данные из файлов: 01.12.2013.xls и 02.12.2013.xls
А данные из файлов: 04.12.2013.xls и 05.12.2013.xls уже не актуализируются.

Решение, которое предложил Boroda у меня не работает.

Пробовал так же макрос, который бы открывал и снова открывал сводный файл. Но он тоже не работает. А кроме того его надо размещать в отдельном файле, что тоже не очень удобно.

Пробовал создавать файлы-пустышки. Чтобы не было ошибок. Но тогда почтовая программа не замещает уже существующие файлы и в сводную таблицу вообще ничего не попадает.

В общем, задача, у меня написать макрос, который будет через интервал времени автоматически актуализировать данные из внешних файлов. И игнорирую возникающие ошибки, проверять на доступность все существующие ссылки.

Посоветуйте, пожалуйста, что можно сделать!

У меня аналогичная задача, обновлять связи из других файлов (около сотни). Только, мне кажется, немного сложнее.

Есть файлы с данными за день, каждый отдельный файл типа: 01.12.2013.xls, 02.12.2013.xls и т.д.
Так же есть сводная месячная таблица типа: Декабрь.xls., где собираются данные за месяц из файлов по дням.

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

Естественно, что при открытии сводного файла Декабрь.xls. происходит обновление связей, и возникают ошибки, т.к. некоторых файлов еще нет. Пользователь ошибку игнорирует. И сводная таблица берет только данные из тех файлов, которые уже есть в наличии.

Использую Excel 2003.

Задача, периодически (скажем раз в 3 часа), обновлять связи и игнорировать возникающие ошибки.

И если появились новые файлы брать из них данные. Если делаю руками через меню: Правка >> Связи >> Обновить, так же возникает ошибка из-за отсутствующих файлов. Я её игнорирую, и все работает как надо.

В макросах я вообще не силен. Пытался делать макрос такого же типа как ВикторЧерный и запускать его вручную. Но макрос почему-то не обновляет данные из новых файлов. Он натыкается на первую же ошибку и останавливается.

Например, есть следующие файлы:
01.12.2013.xls
02.12.2013.xls
04.12.2013.xls
05.12.2013.xls
При открытии сводного файла Декабрь.xls, Excel актуализирует данные из всех доступных для чтения, в данный момент, файлов.

При выполнении макроса, обновляются только данные из файлов: 01.12.2013.xls и 02.12.2013.xls
А данные из файлов: 04.12.2013.xls и 05.12.2013.xls уже не актуализируются.

Решение, которое предложил Boroda у меня не работает.

Пробовал так же макрос, который бы открывал и снова открывал сводный файл. Но он тоже не работает. А кроме того его надо размещать в отдельном файле, что тоже не очень удобно.

Пробовал создавать файлы-пустышки. Чтобы не было ошибок. Но тогда почтовая программа не замещает уже существующие файлы и в сводную таблицу вообще ничего не попадает.

В общем, задача, у меня написать макрос, который будет через интервал времени автоматически актуализировать данные из внешних файлов. И игнорирую возникающие ошибки, проверять на доступность все существующие ссылки.

Посоветуйте, пожалуйста, что можно сделать! jack_jackson

Сообщение Добрый день!

У меня аналогичная задача, обновлять связи из других файлов (около сотни). Только, мне кажется, немного сложнее.

Есть файлы с данными за день, каждый отдельный файл типа: 01.12.2013.xls, 02.12.2013.xls и т.д.
Так же есть сводная месячная таблица типа: Декабрь.xls., где собираются данные за месяц из файлов по дням.

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

Естественно, что при открытии сводного файла Декабрь.xls. происходит обновление связей, и возникают ошибки, т.к. некоторых файлов еще нет. Пользователь ошибку игнорирует. И сводная таблица берет только данные из тех файлов, которые уже есть в наличии.

Использую Excel 2003.

Задача, периодически (скажем раз в 3 часа), обновлять связи и игнорировать возникающие ошибки.

И если появились новые файлы брать из них данные. Если делаю руками через меню: Правка >> Связи >> Обновить, так же возникает ошибка из-за отсутствующих файлов. Я её игнорирую, и все работает как надо.

В макросах я вообще не силен. Пытался делать макрос такого же типа как ВикторЧерный и запускать его вручную. Но макрос почему-то не обновляет данные из новых файлов. Он натыкается на первую же ошибку и останавливается.

Например, есть следующие файлы:
01.12.2013.xls
02.12.2013.xls
04.12.2013.xls
05.12.2013.xls
При открытии сводного файла Декабрь.xls, Excel актуализирует данные из всех доступных для чтения, в данный момент, файлов.

При выполнении макроса, обновляются только данные из файлов: 01.12.2013.xls и 02.12.2013.xls
А данные из файлов: 04.12.2013.xls и 05.12.2013.xls уже не актуализируются.

Решение, которое предложил Boroda у меня не работает.

Пробовал так же макрос, который бы открывал и снова открывал сводный файл. Но он тоже не работает. А кроме того его надо размещать в отдельном файле, что тоже не очень удобно.

Пробовал создавать файлы-пустышки. Чтобы не было ошибок. Но тогда почтовая программа не замещает уже существующие файлы и в сводную таблицу вообще ничего не попадает.

В общем, задача, у меня написать макрос, который будет через интервал времени автоматически актуализировать данные из внешних файлов. И игнорирую возникающие ошибки, проверять на доступность все существующие ссылки.

Посоветуйте, пожалуйста, что можно сделать! Автор — jack_jackson
Дата добавления — 23.12.2013 в 14:52

Источник

Adblock
detector

Like this post? Please share to your friends:
  • Обновление сводной таблицы в excel при изменении данных
  • Обновление сводной таблицы в excel при добавлении данных
  • Обновление сводной таблицы в excel макросом
  • Обновление полей в колонтитулах word
  • Обновление полей в word при открытии