Добрый день!
У меня аналогичная задача, обновлять связи из других файлов (около сотни). Только, мне кажется, немного сложнее.
Есть файлы с данными за день, каждый отдельный файл типа: 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, сводные таблицы и так далее). В этих случаях было бы полезным иметь возможность автоматически обновить все связи в открытых книгах.
Содержание
- Как макрос работает
- Код макроса
- Как работает это код
- Как использовать
Как макрос работает
Этот макрос представляет собой простой сценарий, который использует метод RefreshAll. Этот метод обновляет все связи в данной книге или на листе. В этом случае, мы указываем всю книгу.
Код макроса
Private Sub Workbook_Open() 'Используйте метод RefreshAll Workbooks(ThisWorkbook.Name).RefreshAll End Sub
Как работает это код
В данном макросе мы используем объект ThisWorkbook. Этот объект представляет собой простой и безопасный способ, чтобы указать на текущую книгу. Существует разница между Thisworkbook и ActiveWorkbook.
- Объект ThisWorkbook ссылается на книгу, которая содержит
код. - Объект ActiveWorkbook относится к книге, которая в данный момент активна.
Они часто возвращают один и тот же объект, но если рабочая книга работает с кодом из неактивной рабочей книги, они возвращают различные объекты. Если вы не хотите случайно обновлять связи в других книгах, используете ThisWorkbook.
Как использовать
Для реализации этого макроса, вам нужно скопировать и вставить его в окно кода события Workbook_Open. Размещение макроса там позволяет ему запускаться каждый раз при открытии рабочей книги.
- Активируйте редактор Visual Basic, нажав ALT + F11.
- В окне проекта, найти свой проект / имя рабочей книги и нажмите на знак плюс рядом с ней, чтобы увидеть все листы.
- Нажмите кнопку ThisWorkbook.
- Выберите Открыть событие в Event раскрывающемся списке.
- Введите или вставьте код во вновь созданном модуле.
У меня аналогичная задача, обновлять связи из других файлов (около сотни). Только, мне кажется, немного сложнее.
Есть файлы с данными за день, каждый отдельный файл типа: 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
- Что делает макрос
- Код макроса
- Как работает макрос
- Как использовать
- Скачать файл
Ссылка на это место страницы:
#zadacha
Ваш Excel-файл может иметь подключения к внешним источникам данных (веб-запросы, соединений MSQuery, сводные таблицы и так далее). В этих случаях было бы полезным иметь возможность автоматически обновить все связи в открытых книгах. Этот макрос представляет собой простой сценарий, который использует метод RefreshAll. Этот метод обновляет все связи в данной книге или на листе. Мы указываем всю книгу.
Ссылка на это место страницы:
#formula
Private
Sub
Workbook_Open()
Workbooks(ThisWorkbook.Name).RefreshAll
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.
Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.
Подписывайтесь на нас в соц.сетях:
Добрый день всем! Есть вроде бы простая задача, которую мне никак не удается решить.
Есть несколько книг: первая книга — самая простая, простой «справочник», наименование товара и его цена на сегодняшний день (под сотню-другую строк). Эта книга вручную корректируется довольно часто (цены же растут). Назовем ее Книга №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: изменил отображение кода