Vba excel список связей

 

serjo1

Пользователь

Сообщений: 4
Регистрация: 01.01.1970

Здравствуйте.  

  Помогите пожалуйста найти связь с другими файлами в моем файле. Уже все перепробывал. Поиск ответа не дал. Создавать новый не могу. В приложении только часть таблицы и на создание новой уйдет масса драгоценного времени.

 

ikki

Пользователь

Сообщений: 9709
Регистрация: 22.12.2012

{quote}{login=serjo1}{date=27.04.2012 08:36}{thema=Как найти связь с другим файлом в моем примере}{post}… в моем файле.{/post}{/quote}  

  это на самом деле ваш файл? почему тогда вы не знаете, что и где в нем находится?  

  в имена загляните.

фрилансер Excel, VBA — контакты в профиле
«Совершенствоваться не обязательно. Выживание — дело добровольное.» Э.Деминг

 

serjo1

Пользователь

Сообщений: 4
Регистрация: 01.01.1970

Это часть моего файла весь он весит 10 мегабайт поэтому и не разместил.  
Я думал что все знаю где в нем и что находится, но видимо ошибался. Файл создан полгода назад и все время редактировался (формулы, массивы, ссылки и т.д.)(  
Про имена забыл удалить из короткой версии, но удаление имен не привело к желаемому результату.

 

В вашей книге 2 именованных диапазона (МЕСЯЦ и ТАБЕЛЬНЫЙ), которые ссылаются на ячейки другой книги  
Откройте окно редактирования имён (Ctrl+F3) и отредактируйте ссылки

 

Ссылка на сбойный именованный диапазон МЕСЯЦ есть в списках ячеек столбца G:G  
В старой книге был лист «Месяц», а в новой его нет. Это тупик, и Excel принял правильное решение, скромно отчитавшись о собственной беспомощности  
И так случается всегда…  
Всегда помимо потерянной книги есть дополнительные причины, препятствующие восстановлению связей

 

serjo1

Пользователь

Сообщений: 4
Регистрация: 01.01.1970

Спасибо за отзыв. Я удал диапазоны из книги, но все равно существуют связи. Может быть еще где-то посмотреть?  

  С уважением,  
Сергей

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

А темы зачем дублировать?

 

У меня в Вашей книге после удаления имён связи уходят  
Возможно, Вы сейчас пишете о другой книге?  
Тогда её надо тоже посмотреть  
Можете переслать мне (v__step@mail.ru) только я смогу посмотреть скорее всего  завтра вечером (на работе запарка)  
Лучше сохранить в формате 97-2003

 

{quote}{login=Юрий М}{date=27.04.2012 10:32}{thema=}{post}А темы зачем дублировать?{/post}{/quote}  
Я извиняюсь. Пытался найти кудаобратится что бы удалили предыдущую или самому удалить, но не нашел.

 

Кажется, понял  
Вы пишете об удалении диапазонов  
А надо удалить (или отредактировать) имена

 

Я в своем большом файле все имена поправил и все равно не получается. Я уже к хирургу ехать хотел что бы правильность роста рук проверил((

 

Ссылки на внешние книги могут прятаться в условиях проверок, в формулах условного форматирования, в ссылках некоторых графических объектов (когда выделяешь объект, в строке формул может появиться ссылка), в формулах диаграмм и в объектах в окне диаграмм  
Обратите внимание, у Вас могут быть скрытые объекты (с нулевым размером)  
Неприятность может быть скрыта вместе с ячейками, листами  
Часть имён может быть скрыта посредством VBA  
Возможны также скрытые или сильно скрытые листы (все они видны в окне проекта VBA)  
Это не полный список  
Все эти и другие опасности должна находить утилита Билла Менвилла  
Но можно поискать и самостоятельно

 

k61

Пользователь

Сообщений: 2441
Регистрация: 21.12.2012

http://www.planetaexcel.ru/forum.php?thread_id=22070  

есть post_181204.xls, в котором Sub Svyazi() выводит на отдельный лист все связи книги (в т.ч. битые ссылки). Автор не указан.

 

Доброе утро!  
Я просмотрел процедуру Svyazi — работа идёт только с ячейками, поэтому её возможности интересны, но заведомо ограничены  
Утилита Менвилла распространяется с открытым исходным кодом  
Как бы её охарактеризовать…  
Никогда не видел ничего более обстоятельного и мощного  
У Уокенбаха есть утилита удаления имён. Проблема похожая: надо обойти много объектов, которые могут содержать ссылки (конечно, не только ячейки). В какой-то момент автор останавливается и ограничивает круг поиска, что разумно и очень естественно  
А Менвилл идёт до конца

 

Есть мысль  
Поскольку книгу надо всё-таки посмотреть, можно сделать так:  
1) Ищете связи по ячейкам самостоятельно  
2) Для всех листов Вы очищаете формулы и значения всех ячеек  
3) Если файл ещё большой, частично очищаете форматы (за исключением формул условного форматирования)  
Ничего больше не трогаете (это самое главное)  
Присоединяете книгу к сообщению, а мы ищем связи в большом-большом числе всего оставшегося, где они ещё могут быть

 
 

Нет, там процедура разрыва связей только ячеек, а этого ох, как мало…  
И разрыв связей из окна приложения для «запутавшихся» книг почти никогда не срабатывает  

  Связи — великое достояние Excel, его гибкость и сила  
Это — главный инструмент, самый простой и самый сложный одновременно  
Поэтому так трудно бывает найти потерянные связи  
Объектом — носителем внешней связи может быть и сводная таблица, и прямоугольник где-нибудь внутри сгруппированных объектов, и подпись какой-то одной точки на диаграмме…  

  Поэтому надо быть очень осторожным при ссылках даже на другие листы, при каждом копировании данных из другой книги немедленно проверять появление связей (в этот момент от них избавиться очень просто)

 

serjo1

Пользователь

Сообщений: 4
Регистрация: 01.01.1970

Доброго всем время суток!  

  Благодаря v__step наконец-то найдены связи в моей таблице. Перебирая массу вариантов поиска места «засады», в которой сидят ссылки, остановились на следующем:  
 Создаём новую книгу, располагаем её рядом со старой и начинаем перетягивать листы из старой в новую по-одному за ярлычок.  
 Перетянули — посмотрели — на вкладке ленты  «Данные» оживёт кнопка «Изменить связи»  
 Если ожила нажимаем на неё — открывается окно связей. Если там только старая книга, значит спокойно удаляем этот лист и переходим к следующему.  
 Но если появятся ещё строчки — значит на этом листе есть внешняя ссылка!  
 И так спокойно для каждого листа.  
 Запоминаем или записываем на листочек (надежнее) те листы на которых есть ссылки на файл(ы) в других книгах. Нам это пригодится потом для исправления формул.  

  Далее мы удалили все внешние связи следующим путем:  
  Переименовываем файл (на всякий случай) с изменением расширения .xlsm на .zip  
  Получается — зазипованная папка  
  Заходим в эту папку не раззиповывая и ищем везде папку с названием «externalLinks», затем удаляем её и снова меняем расширение на .xlsm    

  Открываем файл появляется сообщение об ошибке. Восстанавливаем и открываем лист в котором ранее нашли ссылки на другие файлы. Внимательно просматриваем все изменения и обнаруживаем что несколько формул или (как у меня) раскрывающихся ячеек не работает. Восстанавливаем со ссылкой на свою книгу и продолжаем радоваться жизни.  
Еще раз хочу выразить благодарность за помощь в моем, как оказалось не безнадежном, деле «v__step» — Спасибо Владимир. Всех с праздником трудящихся.

 

Омо Йоко

Гость

#19

19.10.2012 06:52:05

Мне помог поиск. Ctrl+F, оставляем параметр «искать в области формул», в качестве искомого указываю «!», предполагая, что ссылка будет на какой-то лист Excel. С параметром «найти все» получаю полный список ссылок. Просматриваю, убеждаюсь, что они не нужны, удаляю, и кнопка «изменить» на вкладке «данные» гаснет. Excel 2010.

Как разорвать связи в Excel

Описание проблемы

Когда в формуле вы указываете ссылку на другую книгу, то Excel образует с ней связь. Эта связь будет прекрасно работать и обновляться автоматически в том случае, когда открыты обе книги.

К сожалению, если книга-источник была удалена/перемещена или переименована, то связь нарушится. Также связь будет потеряна если вы переместите конечный файл (содержащий ссылку). Если вы передадите только конечный файл по почте, то получатель тоже не сможет обновить связи.

При нарушении связи, ячейки со ссылками на другие книги будут содержать ошибки #ССЫЛКА.

Как разорвать связь

Один из способов решения данной проблемы — разрыв связи. Если в файле только одна связь, то сделать это довольно просто:

  1. Перейдите на вкладку Данные.
  2. Выберите команду Изменить связи в разделе Подключения.
  3. Нажмите Разорвать связь.

ВАЖНО! При разрыве связи все формулы ссылающиеся на книгу-источник будут преобразованы в значения! Отмена данной операции невозможна!

Как разорвать связь со всеми книгами

Для удобства, можно воспользоваться макросом, который разорвет связи со всеми книгами. Макрос входит в состав надстройки VBA-Excel. Чтобы им воспользоваться необходимо:

  1. Перейти на вкладку VBA-Excel.
  2. В меню Связи выбрать команду Разорвать все связи.

Код на VBA

Код макроса удаляющего все связи с книгой представлен ниже. Можете скопировать его в свой проект.

Как разорваться связи только в выделенном диапазоне

Иногда в книге имеется много связей и есть опасения, что при удалении связи можно удалить лишнюю. Чтобы этого избежать с помощью надстройки можно удалить связи только в выделенном диапазоне. Для этого:

  1. Выделите диапазон данных.
  2. Перейдите на вкладку VBA-Excel (доступна после установки).
  3. В меню Связи выберите команду Разорвать связи в выделенных ячейках.

Microsoft Excel

трюки • приёмы • решения

Как в Excel отобразить связанные ячейки

В Excel имеется очень полезная возможность отображения связанных ячеек. Так, можно для ячейки с формулой отобразить связи — ячейки, значения из которых используются в формуле. Кроме того, установив табличный курсор в какую-либо ячейку, можно просмотреть, в каких формулах она участвует. При этом вес связи отображаются в виде стрелок.

Чтобы отобразить связи с ячейками, участвующими в данной формуле, следует установить табличный курсор на ячейку с формулой и на вкладке Формулы ленты инструментов нажать кнопку Влияющие ячейки. В результате к ячейке устремятся стрелочки, отходящие от ячеек, участвующих в формуле (рис. 1.12).

Рис. 1.12. Влияющие ячейки

Чтобы наглядно увидеть, на какие другие ячейки влияет значение какой-либо из ячеек, следует установить на нее табличный курсор и на вкладке Формулы ленты инструментов нажать кнопку Зависимые ячейки. В результате от ячейки с формулой отойдут стрелочки, указывающие на зависимые ячейки (рис. 1.13). Необходимо иметь в виду, что связи показываются только с теми ячейками, на которые впрямую влияет значение выбранной ячейки. Связь не отображается в случае косвенного влияния, когда первая ячейка влияет на вторую, а вторая влияет на третью. В этом случае первая ячейка косвенно влияет на значение в третьей ячейке, но связь в таком случае не отображается.

Рис. 1.13. Зависимые ячейки

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

Чтобы убрать с экрана отображенные связи, на вкладке Формулы ленты инструментов достаточно нажать кнопку Убрать стрелки. В результате будут скрыты все отображенные ранее связи. В том случае, если требуется скрыть связи только определенного типа (иллюстрирующие влияющие связи или зависимые), следует щелкнуть мышкой по стрелочке, расположенной рядом с кнопкой Убрать стрелки, и в появившемся меню выбрать, какие именно стрелки необходимо убрать (рис. 1.14).

Рис. 1.14. Сокрытие ненужных стрелок

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

Поиск ссылок (внешних ссылок) в книге

Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

Связывание с другими книгами — это очень распространенная задача в Excel, но иногда вы можете столкнуться с книгой, в которой есть ссылки, даже если Excel сообщает, что они существуют. Найти все внешние ссылки, которые используются в книге, не существует. Однако вы можете воспользоваться несколькими ручными методами. Необходимо искать формулы, определенные имена, объекты (такие как текстовые поля или фигуры), названия диаграмм и ряды данных диаграммы.

В любой книге Excel, на которую вы ссылались, есть имя файла этой книги в ссылке с расширением (например, XLS, XLSX, xlsm), поэтому рекомендуемый способ — найти все ссылки на разделяемое расширение файла . XL . Если вы собираетесь создать связь с другим источником, вам нужно будет определить наиболее подходящее условие поиска.

Поиск ссылок, используемых в формулах

Нажмите клавиши CTRL + F , чтобы открыть диалоговое окно Поиск и замена .

Выберите пункт Параметры.

В поле найти введите . XL.

В поле в выберите пункт Книга.

В поле Искать в выберите пункт формулы.

Нажмите кнопку найти все.

В появившемся списке просмотрите формулы с формулами, которые содержат . XL. В этом случае приложение Excel обнаружило несколько экземпляров шаблона бюджета Master. xlsx.

Чтобы выделить ячейку с внешней ссылкой, щелкните ссылку адрес ячейки для этой строки в поле со списком.

Совет: Щелкните любой заголовок столбца, чтобы отсортировать столбец, а затем сгруппируйте все внешние ссылки.

На вкладке Формулы в группе Определенные имена выберите пункт Диспетчер имен.

Установите флажки для всех элементов в списке и просмотрите их в столбце » ссылки » для внешних ссылок. Внешние ссылки содержат ссылку на другую книгу, например [Budget. xlsx].

Щелкните любой заголовок столбца, чтобы отсортировать столбец, а затем сгруппируйте все внешние ссылки.

Вы можете сгруппировать несколько элементов с помощью клавиш SHIFT или CTRL , щелкнув левой кнопкой мыши, если вы хотите удалить несколько элементов одновременно.

Нажмите клавиши CTRL + G, сочетание клавиш для диалогового окна Переход и выберите Специальныеобъекты _гт_ _гт_ ОК. Будут выбраны все объекты на активном листе.

Нажимайте клавишу Tab для перемещения между каждым из выбранных объектов, а затем просмотрите строка формул для ссылки на другую книгу, например [Budget. xlsx].

Щелкните название диаграммы на диаграмме, которую нужно проверить.

В строка формул найдите ссылку на другую книгу, например [Budget. xls].

Выберите диаграмму, которую вы хотите проверить.

На вкладке Макет в группе Текущий фрагмент щелкните стрелку рядом с полем элементы диаграммы , а затем выберите ряд данных, который вы хотите проверить.

В строка формул найдите ссылку на другую книгу, например [Budget. xls] в функции ряд.

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community, попросить помощи в сообществе Answers community, а также предложить новую функцию или улучшение на веб-сайте Excel User Voice.

Невозможно разорвать связи с другой книгой

Прежде чем разобрать причины ошибки разрыва связей, не лишним будет разобраться что такое вообще связи в Excel и откуда они берутся. Если все это Вам известно — можете пропустить этот раздел 🙂

Что такое связи в Excel и как их создать
Иногда при работе с различными отчетами приходится создавать связи с другими книгами(отчетами). Чаще всего это используется в функциях вроде ВПР (VLOOKUP) для получения данных по критерию из таблицы, расположенной в другой книге. Так же это может быть и простая ссылка на ячейки другой книги. В итоге ссылки в таких ячейках выглядят следующим образом:
=ВПР( A2 ;'[Продажи 2018.xlsx]Отчет’!$A:$F;4;0)
или
‘[Продажи 2018.xlsx]Отчет’!$A1

  • [Продажи 2018.xlsx] — обозначает книгу, в которой итоговое значение. Такие книги так же называют источниками
  • Отчет — имя листа в этой книге
  • $A:$F и $A1 — непосредственно ячейка или диапазон со значениями

Если закрыть книгу, на которую была создана такая ссылка, то ссылка сразу изменяется и принимает более «длинный» вид:
=ВПР( A2 ;’C:UsersДмитрийDesktop[Продажи 2018.xlsx]Отчет’!$A:$F;4;0)
‘C:UsersДмитрийDesktop[Продажи 2018.xlsx]Отчет’!$A1
Предположу, что большинство такими ссылками не удивишь. Такие ссылки так же принято называть связыванием книг. Поэтому как только создается такая ссылка на вкладке Данные в группе Запросы и подключения активируется кнопка Изменить связи. Там же, как несложно догадаться, их можно изменить. В большинстве случаев ни использование связей, ни их изменение не доставляет особых проблем. Даже если в книге источники были изменены значения ячеек, то при открытии книги со связью эти изменения будут так же автоматом обновлены. Но если книгу-источник переместили или переименовали — при следующем открытии книги со ссылками на неё Excel покажет сообщение о недоступных связях в книге и запрос на обновление этих ссылок:

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

Так же изменение связей доступно непосредственно из вкладки Данные

Как разорвать связи
Как правило связи редко нужны на продолжительное время, т.к. они неизбежно увеличивают размер файла, особенно, если связей много. Исключениями являются случаи, когда связи делаются на некие общие файлы, расположенные на сетевом диске и заполняемые разными подразделениями, а в итоговый файл связями просто забираются конкретные значения из этого файла. Чтобы разорвать связи необходимо перейти на вкладку Данные -группа Данные и подключения -Изменить связи:

Выделить нужные связи и нажать Разорвать связь. При этом все ячейки с формулами, содержащими связи, будут преобразованы в значения вычисленные этой формулой при последнем обновлении. Данное действие нельзя будет отменить — только закрытием книги без сохранения.
Так же связи внутри формул разрываются, если формулы просто заменить значениями -Копируем нужные ячейки -Правая кнопка мыши -Специальная вставка -Значения. Формулы в ячейках будут заменены результатами их вычислений, а все связи будут удалены.
Более подробно про замену формул значениями можно узнать из статьи: Как удалить в ячейке формулу, оставив значения?

Что делать, если связи не разрываются

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

  • проверьте нет ли каких-либо связей в именованных диапазонах:
    нажмите сочетание клавиш Ctrl + F3 или перейдите на вкладку Формулы (Formulas)Диспетчер имен (Name Manager)
    Читать подробнее про именованные диапазоны
    Если в каком-либо имени есть ссылка с полным путем к какой-то книге(вроде такого ‘[Продажи 2018.xlsx]Отчет’!$A1 ), то такое имя надо либо изменить, либо удалить. Кстати, некоторые имена в итоге могут выдавать ошибку #ССЫЛКА! (#REF!) . К ним тоже стоит присмотреться.
    Настоятельно рекомендую перед удалением имен создать резервную копию файла, т.к. неверное удаление таких имен может повлечь неправильную работу файла даже в случае, если сами ссылки возвращали в итоге ошибочное значение.
  • если удаление лишних имен не дает эффекта — проверьте условное форматирование:
    вкладка Главная (Home)Условное форматирование (Conditional formatting)Управление правилами (Manage Rules) . В выпадающем списке проверить каждый лист и условия в нем:

    Может случиться так, что условие было создано с использованием ссылки на другие книги. Как правило Excel запрещает это делать, но если ссылка будет внутри какого-то именованного диапазона — то диапазон такой можно будет применить в УФ, но после его удаления в самом УФ это имя все равно остается и генерирует ссылку на файл-источник. Такие условия можно удалять без сомнений — они все равно уже не выполняются как положено и лишь создают «пустую» связь.
  • Так же не помешает проверить наличие лишних ссылок и среди проверки данных(Что такое проверка данных). Как правило связи могут быть в проверке данных с типом Список. Но как их отыскать, если проверка данных распространена на множество ячеек? Проверять каждую? Это очень долго. Поэтому я предлагаю коротенький код, который отыщет все такие ссылки быстрее и сэкономит время):

Option Explicit ‘————————————————————————————— ‘ Author : The_Prist(Щербаков Дмитрий) ‘ Профессиональная разработка приложений для MS Office любой сложности ‘ Проведение тренингов по MS Excel ‘ https://www.excel-vba.ru ‘ info@excel-vba.ru ‘ WebMoney — R298726502453; Яндекс.Деньги — 41001332272872 ‘ Purpose: ‘————————————————————————————— Sub FindErrLink() ‘надо посмотреть в Данные -Изменить связи ссылку на файл-иточник ‘и записать сюда ключевые слова в нижнем регистре(часть имени файла) ‘звездочка просто заменяет любое кол-во символов, чтобы не париться с точным названием Const sToFndLink$ = «*продажи 2018*» Dim rr As Range, rc As Range, rres As Range, s$ ‘определяем все ячейки с проверкой данных On Error Resume Next Set rr = ActiveSheet.UsedRange.SpecialCells(xlCellTypeAllValidation) If rr Is Nothing Then MsgBox «На активном листе нет ячеек с проверкой данных», vbInformation, «www.excel-vba.ru» Exit Sub End If On Error GoTo 0 ‘проверяем каждую ячейку на предмет наличия связей For Each rc In rr ‘на всякий случай пропускаем ошибки — такое тоже может быть ‘но наши связи должны быть без них и они точно отыщутся s = «» On Error Resume Next s = rc.Validation.Formula1 On Error GoTo 0 ‘нашли — собираем все в отдельный диапазон If LCase(s) Like sToFndLink Then If rres Is Nothing Then Set rres = rc Else Set rres = Union(rc, rres) End If End If Next ‘если связь есть — выделяем все ячейки с такими проверками данных If Not rres Is Nothing Then rres.Select ‘ rres.Interior.Color = vbRed ‘если надо выделить еще и цветом End If End Sub

Чтобы правильно использовать приведенный код, необходимо скопировать текст кода выше, перейти в редактор VBA( Alt + F11 ) -создать стандартный модуль(InsertModule) и в него вставить скопированный текст. После чего вызвать макросы( Alt + F8 ), выбрать FindErrLink и нажать выполнить.
Есть пара нюансов:
1. Прежде чем искать ненужную связь необходимо определить её ссылку: Данные -Изменить связи. Запомнить имя файла и записать в этой строке внутри кавычек:
Const sToFndLink$ = «*продажи 2018*»
Имя файла можно записать не полностью, все пробелы и другие символы можно заменить звездочкой дабы не ошибиться. Текст внутри кавычек должен быть в нижнем регистре. Например, на картинках выше есть связь с файлом «Продажи 2018.xlsx», но я внутри кода записал «*продажи 2018*» — будет найдена любая связь, в имени которой есть «продажи 2018».
2. Код ищет проверки данных только на активном листе
3. Код только выделяет все найденные ячейки(обычное выделение), он ничего сам не удаляет.
4. Если надо подсветить ячейки цветом — достаточно убрать апостроф(‘) перед строкой
rres.Interior.Color = vbRed ‘если надо выделить еще и цветом

Как правило после описанных выше действий лишних связей остаться не должно. Но если вдруг связи остались и найти Вы их никак не можете или по каким-то причинам разорвать связи не получается(например, лист со связью защищен)- можно пойти совершенно иным путем. Действует этот рецепт только для файлов новых форматов Excel 2007 и выше:
1. Обязательно делаем резервную копию файла, связи в котором никак не хотят разрываться
2. Открываем файл при помощи любого архиватора(WinRAR отлично справляется, но это может быть и другой, работающий с форматом ZIP)
3. В архиве перейти в папку xl -> externalLinks
4. Сколько связей содержится в файле, столько файлов вида externalLink1.xml и будет внутри. Файлы просто пронумерованы и никаких сведений о том, к какому конкретному файлу относится эта связь на поверхности нет. Чтобы узнать какой файл .xml к какой связи относится надо зайти в папку «_rels» и открыть там каждый из имеющихся файлов вида externalLink1.xml.rels. Там и будет содержаться имя файла-источника.
5. Если надо удалить только связь на конкретный файл — удаляем только те externalLink1.xml.rels и externalLink1.xml, которые относятся к нему. Если удалить надо все связи — удаляем все содержимое папки externalLinks
6. Закрываем архив
7. Открываем файл в Excel. Появится сообщение об ошибке вроде «Ошибка в части содержимого в Книге . «. Соглашаемся. Появится еще одно окно с перечислением ошибочного содержимого. Нажимаем закрыть.

После этого связи должны быть удалены.

Статья помогла? Поделись ссылкой с друзьями!

Обобщаем с умом: внешние ссылки и консолидация в Excel

Здравствуйте, уважаемые читатели. Как часто перед Вами стоит задача консолидации, или свода данных из разных листов и книг в одну таблицу? Думаю, что часто. Консолидация в Excel — это трудоемкая, кропотливая и неприятная работа, но в этой статье я расскажу, как ее облегчить. Для сбора информации из разных источников есть два подхода: внешние ссылки на ячейки, или инструмент «Консолидация».

Внешние ссылки в Excel

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

Если итоговая таблица достаточно простая, этот способ можно использовать, иначе – легко запутаться, да и утомительно вручную внести несколько сотен ссылок на ячейки, высока вероятность ошибки. Тем не менее, для маленьких таблиц это действительно решение.

Существует много способов сослаться на ячейку с другого листа, или книги. Я расскажу Вам самый простой:

  1. Откройте все файлы – свод и исходники
  2. Кликните по ячейке, в которую нужно вставить ссылку, и введите знак равно (как вы это делаете, когда создаете формулы).
  3. Выберите файл с исходным значением и кликните на этом значении. В строке формул появится ссылка на это значение.
  4. Если к этому значению нужно прибавить другие из остальных источников – допишите «+» и повторяйте п.3-4 до полного заполнения.
  5. Когда все ссылки на ячейки сделаны, нажмите Enter , будет просчитан сводный результат.

Внешняя ссылка имеет специфический внешний вид: имя файла в квадратных скобках, имя листа, восклицательный знак, координаты ячейки:

Когда Вы закроете исходные файлы, к ссылке слева добавится еще и адрес файла-исходника:

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

Не перемещайте файлы-исходники, т.к. это разорвет связи, и внешние ссылки работать больше не будут.

Если на одном компьютере открыт и сводный документ и исходник, изменения в исходной таблице сразу же «подтянутся» и в свод. Если хотя бы одна из этих книг закрыта – понадобится принудительное обновление. Так же, при повторном открытии сводного файла, Эксель предложит обновить данные. Сделайте это, если нужно актуализировать информацию.

Управление внешними ссылками

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

  • Обновить – принудительное обновление всех ссылок
  • Изменить – указать новую книгу Excel, в которой располагаются подключенные данные
  • Открыть – открывает документ-источник
  • Разорвать связь – удаляет внешние ссылки из этой связи, заменяет их на значение
  • Состояние – обновляет статус доступности файлов с данными
  • Запрос на обновление связей – укажите программе, нужно ли обновлять данные при открытии файла

Если у Вас большой файл с несколькими листами, может понадобиться много времени на поиски внешних ссылок. Так как быстро найти внешние ссылки в документе Excel? Предложу рецепт. Все подобные ссылки имеют общий элемент – открывающая и закрывающая квадратные скобки, в которые записано имя файла-исходника. В других случаях такие скобки используются редко. Нажмите Ctrl+F для открытия окна поиска, в поле «Найти» введите квадратную скобку и нажмите «Найти все». В результатах поиска точно будут все внешние ссылки.

Применение внешних ссылок – самый простой и очевидный способ собрать данные из нескольких таблиц в одну. Но если данных достаточно много, этот метод неприменим. Тогда пользуемся инструментом «Консолидация».

Консолидация данных в одну таблицу

Этот инструмент упрощает сведение информации в одну таблицу данных, это удачный способ автоматизации процесса.

Рассмотрим его работу на примере. У нас есть 3 файла с данными о продажах трех подразделений компании. Нужно собрать общие показатели по организации, и сделать это быстро, ведь информация нужна «на вчера».

Давайте выполнять. Открываем все файлы-исходники и свод. Активируем «Свод». Ищем на ленте Данные – Работа с данными – Консолидация . Откроется окно подключения внешних данных.

Теперь пошагово выполняем:

  1. В поле «Функция» выбираем «Сумма» (или что-то другое, если нужно)
  2. В поле «Ссылка» указываем ссылку на данные в первом файле-источнике (вместе с шапкой). Лучше всего, указать столбцы полностью, например A:D . Тогда не нужно будет переопределять диапазон при добавлении новых данных.
  3. Нажимаем «Добавить», ссылка появляется в поле «Список диапазонов»
  4. Повторяйте п. 2-3, пока не добавите ссылки на все файлы-исходники

  1. Установите галочки «Подписи верхней строки» и «Значения левого столбца», чтобы Эксель сам подобрал заголовки шапки и категории в строках
  2. Установите галку «Создавать связи с исходными данными», тогда консолидация будет сделана с помощью ссылок на ячейки. Иначе – будут просто вставлены итоговые значения.
  3. Нажмите Ок для завершения настройки консолидации.

В итоге, в файле «Свод» появится сведенный список из таблиц всех подключенных файлов. Если установили галочку «Создавать связи с исходными данными», итоговая таблица будет структурирована, можно развернуть каждый пункт и увидеть детали по каждому подразделению отдельно

Если исходные таблицы изменились, можно переформировать свод. Для этого повторно откройте окно «Консолидация» и нажмите Ок.

Такой вот простой инструмент, решающий одну из самых противных задач в Эксель. Я предпочитаю применять именно его, ручная работа по внесению ссылок – не для меня. Рекомендую и Вам пользоваться. Хотя, более удачным решением будет применение сводной таблицы (когда это возможно), или создание собственной VBA-программы с детальными настройками сведения.

На этом оставлю Вас экспериментировать с Консолидацией, и приступаю к написанию поста о защите данных в Эксель. Читайте, эта информация сейчас, как никогда актуальна. До встречи!

MulTEx »

10 Январь 2020              8967 просмотров

Найти скрытые связи

Данная функция является частью надстройки MulTEx


Вызов команды:
MulTEx -группа Книги/ЛистыКнигиНайти скрытые связи


Иногда при работе с различными отчетами приходится создавать связи с другими книгами(отчетами). Чаще всего это используется в функциях вроде ВПР(VLOOKUP) для получения данных по критерию из таблицы, расположенной в другой книге. Так же это может быть и простая ссылка на ячейки другой книги. В итоге ссылки в таких ячейках выглядят следующим образом:
=ВПР(A2;'[Продажи 2018.xlsx]Отчет’!$A:$F;4;0)
или
='[Продажи 2018.xlsx]Отчет’!$A1
[Продажи 2018.xlsx] — обозначает книгу, в которой итоговое значение. Такие книги так же называют источниками
Отчет — имя листа в этой книге
$A:$F и $A1 — непосредственно ячейка или диапазон со значениями

Если закрыть книгу, на которую была создана такая ссылка, то ссылка сразу изменяется и принимает более «длинный» вид:
=ВПР(A2;’C:UsersДмитрийDesktop[Продажи 2018.xlsx]Отчет’!$A:$F;4;0)
=’C:UsersДмитрийDesktop[Продажи 2018.xlsx]Отчет’!$A1
Такие ссылки так же принято называть связыванием книг. И как только создается такая ссылка, на вкладке Данные(Data) в группе Запросы и подключения(Queries & Coonections) активируется кнопка Изменить связи(Edit Links). Там же их можно изменить. В большинстве случаев ни использование связей, ни их изменение не доставляет особых проблем. Но если книгу-источник переместили или переименовали — при следующем открытии книги со ссылками на неё Excel покажет сообщение о недоступных связях в книге и запрос на обновление этих ссылок:
Запрос на обновление связей

Если нажать Продолжить, то ссылки обновлены не будут и в ячейках будут оставлены значения на момент последнего сохранения. Происходит это потому, что ссылки хранятся внутри самой книги и так же там хранятся значения этих ссылок. Если же нажать Изменить связи(Change Source), то появится окно изменения связей, где можно будет выбрать каждую связь и указать правильное расположение нужного файла:
Изменение/удаление связей
Так же изменение связей доступно непосредственно из вкладки Данные(Data). Там же связи можно разорвать, т.к. как правило связи редко нужны на продолжительное время(ведь они неизбежно увеличивают размер файла, особенно, если связей много). Чтобы разорвать связи необходимо перейти на вкладку Данные(Data) -группа Запросы и подключения(Queries & Coonections)Изменить связи(Edit Links)(появится тоже самое окно, что показано выше). Выделить нужные связи и нажать Разорвать связь(Break Link). При этом все ячейки с формулами, содержащими связи, будут преобразованы в значения, вычисленные этой формулой при последнем обновлении. Данное действие нельзя будет отменить — только закрытием книги без сохранения.
Но иногда возникают ситуации, когда вроде все связи разорваны всеми доступными методами, но запрос на обновление каких-то связей все равно появляется. Вот для поиска этих мифических связей и предназначена команда MulTEx Найти скрытые связи, т.к. она ищет связи не только внутри формул, где их разрывает стандартно сам Excel, но и среди других возможных мест их нахождения:
Найти скрытые связи

Искать связи:
выбирается тип связей(с ошибками или все) и местонахождение связей: формулы, проверка данных, условное форматирование, именованные диапазоны.

    типы связей

  • все — будут просматриваться все связи на другие книги
  • только с ошибками — будут просматриваться только те связи на другие книги, которые содержат ошибку типа #ССЫЛКА!(#REF!)
    местонахождение (можно выбрать сразу несколько вариантов)

  • в Формулах — связи будут просматриваться только в формулах, записанных в ячейках листа
  • в Проверке данных — связи будут просматриваться только в ячейках, для которых установлена проверка данных(вкладка Данные -Проверка данных). Подробнее про проверку данных >>
  • в Условном форматировании — связи будут просматриваться в правилах условного форматирования. При этом правила просматриваются в ячейках или листах, указанных в блоке Просматривать связи
  • в Именованных диапазонах — связи будут просматриваться в именованных диапазонах. При этом имена могут быть скрытыми и не отображаться напрямую в списке имен, что делает невозможным их редактирование или удалению напрямую из Excel. Для просмотра и удаления таких имен следует воспользоваться командой MulTEx Управление именами

Искать только если имя источника содержит — если флажок установлен, то необходимо в поле ниже ввести слово или словосочетание, которое необходимо найти внутри ссылки/связи. В этом случае будут отобраны только те связи, внутри которых есть подобное слово/словосочетание. Необходимо для случаев, когда необходимо целенаправленно отыскать только связи, ссылающиеся на определенную книгу или папку.
Например, чтобы отобрать ссылки на книгу с именем «Отчет за 2-е полугодие 2018» необходимо задать в поле текст: *[Отчет за 2-е полугодие 2018.xls*]*. Звездочка после xls не случайна — это избавляет от необходимости определять конкретное расширение для книги(xlsm, xlsx,xlsb,xls и т.п.).
Если необходимо отобрать ссылки на любые книги из папки «Маркетинг», текст необходимо задать такой *Маркетинг*

Просматривать связи:

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

После нахождения связи:
выбирается действие вывода результата

  • выделить ячейки со связями- будут выделены обычным выделением все ячейки, в которых так или иначе присутствуют найденных связи. После этого с выделенными ячейками можно будет делать любые действия, доступные для ячеек: залить цветом, удалить содержимое, изменить параметры и т.д.
    Примечание: Если связь в ячейке присутствует не напрямую, а через именованный диапазон, то такая ячейка не будет определена. Для того, чтобы найти такие связи лучше использовать вывод на лист.
  • выделить ячейки цветом — все ячейки, в которых так или иначе присутствуют найденных связи, будут закрашены выбранным цветом
    Примечание: Если связь в ячейке присутствует не напрямую, а через именованный диапазон, то такая ячейка не будет определена. Для того, чтобы найти такие связи лучше использовать вывод на лист.
  • вывести список ячеек и связей на отдельный лист — будет создана новая книга с одним листом, в котором списком будут выведены все найденные связи с указанием:
    • Имя листа — лист, где содержится ссылка, если ссылка является частью формулы, проверки данных или условного форматирования. Если связь содержится внутри именованного диапазона, то в это поле записывается область действия имени: [Книга], если область действия книги и имя листа, если конкретный лист.
    • Адрес ячейки — ячейка, в которой связь. В случае с именованным диапазоном — выводится имя диапазона
    • Формула — формула листа, проверки данных, условного форматирования или именованного диапазона
    • Тип — тип объекта, в котором обнаружена связь: формула, проверка данных, условное форматирование или именованный диапазон
  • попытаться разорвать связь — в данном случае при нахождении связи MulTEx попытается удалить эту связь. Если это условное форматирование — MulTEx попытается удалить правило условного форматирования со связью. Если это проверка данных — MulTEx попытается удалить проверку данных из ячейки. Если это формула на листе — формула будет удалена. В случае с именованным диапазоном MulTEx не предпринимает никаких действий по простой причине: именованные диапазоны могут быть использованы и внутри других имен, и внутри формул, и внутри проверок данных и условного форматирования и удаление такого имени может привести к множественным ошибкам, корректного устранить которые уже не получится. В таких случаях лучше использовать сначала вывод результата на лист для определения нужных имен и удаления их вручную убедившись, что такое удаление не повлечет ошибки вычислений.

Расскажи друзьям, если статья оказалась полезной:

  Плейлист   Видеоинструкции по использованию надстройки MulTEx

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. Введите или вставьте код во вновь созданном модуле.

In previous posts, I’ve discussed using VBA to extract connection information from Pivot Tables and hacking a tables command so that you can programmatically change the results of a query. But what if you have a table and you want to change its connection and its command?

This can be achieved pretty easy using the tables .QueryTable object. In fact, we can change the entire table using this class.

So how does it work? Suppose, I’ve inserted some data into a worksheet from SQL Server. The menu path is DATA à From Other Sources à From SQL Server. Next I get the familiar connection windows to connect to a server and then select a table (as below).

I’ll give the table a friendly name (adventure_works) and return the data to a table. I get a connected table which is sourced from a query and can be updated (either right click somewhere in the table and select Refresh from the popup menu or select the refresh button from the TABLE TOOLS à DESIGN (ribbon) menu).

I can also use the DESIGN of the table tools to give my table a decent name by just replacing its name (as in the following image).

Now I want to change the database server (and potentially the query) that my table uses. There are 2 things to keep in mind here. Firstly, we need to change the query’s connection string (no brainer eh) and secondly, the table (in Excel) was added as a table.

As in the previous post, I can refer to the table as a list object in VBA, this is a property of the sheet, so, in order to reference the table I’ll have to use some code like this (note the table was on Sheet2).

Dim li As ListObject

Set li = Sheet2.ListObjects(“aw_employees”)

For the connection string, I can refer to it through the ListObjects QueryTable class. So I could determine what the current connection string or set it by using the following code;

Debug.Print li.QueryTable.Connection ‘retrieve the connectionstring

li.QueryTable.Connection = “OLEDB;Provider=SQLOLEDB.1;…(this is my connection string) ..”

If I then refresh the table (using li.Refresh), one may think that’s the end of the story and our works completed – but that’s not quite true just yet.

Remember that we added the table as an SQL table? Because of this, the ‘query’ for the .querytable actually refers to a table including the SQL database and has its .CommandType as a table. If we debug the code to determine the command (as below) we could see this

After we change the connection, we could set the new table to use employee (without a database) with something simple (like);

li.QueryTable.CommandText = “dbo.DimEmployee”

li.Refresh

Or, we could change the query type of an Command, and provide its text. This would suffice for that;

li.QueryTable.CommandType = xlCmdSql

li.QueryTable.CommandText = “select * from dbo.DimEmployee”

li.Refresh

That’s about it, we can change the tables connection, its query and have these changes reflected in our table.

Понравилась статья? Поделить с друзьями:
  • Vba excel список объектов
  • Vba excel список всех файлов в папке
  • Vba excel списка таблица
  • Vba excel списка таблиц
  • Vba excel специальная вставка