Lavr Пользователь Сообщений: 2 |
Есть два Excel файла один «источник данных» другой «рабочий» |
subtlety Пользователь Сообщений: 375 |
Связь в смысле — формула? Например вот так: |
Lavr Пользователь Сообщений: 2 |
, например, на листе формулы типа: |
ikki Пользователь Сообщений: 9709 |
в ексель есть: что это значит? фрилансер Excel, VBA — контакты в профиле |
спасибо всем кто хотел помочь ) …. exLink = Range(«B1»).Value ‘ в ячейке B1 указан полный путь к файлу.’старое имя связи MsgBox «Укажите файл — источник данных» _ ‘ запрос пользователю на новый источник данных ‘замена ссвязей с старого источника данных на новый Range(«B1»).FormulaR1C1 = strwPath ‘сохранение в ячейку B1 полного имени файла для следующего запуска ЗЫ. возможно, кто-то знает спрособ попроще )) |
|
Vitalink Пользователь Сообщений: 20 |
Необходима похожая функция. Ситуация отличается тем, что: Надо сделать чтобы при открытии отчета обновлялись ссылки на источники. Часть записанной макрорекордером функции: ActiveWorkbook.ChangeLink _ |
Vitalink Пользователь Сообщений: 20 |
#7 13.07.2012 14:09:00 Воспользовался помощью http://www.msoffice.nm.ru Результат: Sub ИзменениеСсылок() |
Содержание
- Как разорвать связи в Excel
- Описание проблемы
- Как разорвать связь
- Как разорвать связь со всеми книгами
- Код на VBA
- Как разорваться связи только в выделенном диапазоне
- Метод Workbook.UpdateLink (Excel)
- Синтаксис
- Параметры
- Замечания
- Пример
- Поддержка и обратная связь
- Paul te Braak
- Business Intelligence Blog
- Changing Excel Table Connections in VBA
- Невозможно разорвать связи с другой книгой
Как разорвать связи в Excel
Описание проблемы
Когда в формуле вы указываете ссылку на другую книгу, то Excel образует с ней связь. Эта связь будет прекрасно работать и обновляться автоматически в том случае, когда открыты обе книги.
К сожалению, если книга-источник была удалена/перемещена или переименована, то связь нарушится. Также связь будет потеряна если вы переместите конечный файл (содержащий ссылку). Если вы передадите только конечный файл по почте, то получатель тоже не сможет обновить связи.
При нарушении связи, ячейки со ссылками на другие книги будут содержать ошибки #ССЫЛКА.
Как разорвать связь
Один из способов решения данной проблемы — разрыв связи. Если в файле только одна связь, то сделать это довольно просто:
- Перейдите на вкладку Данные.
- Выберите команду Изменить связи в разделе Подключения.
- Нажмите Разорвать связь.
ВАЖНО! При разрыве связи все формулы ссылающиеся на книгу-источник будут преобразованы в значения! Отмена данной операции невозможна!
Как разорвать связь со всеми книгами
Для удобства, можно воспользоваться макросом, который разорвет связи со всеми книгами. Макрос входит в состав надстройки VBA-Excel. Чтобы им воспользоваться необходимо:
- Перейти на вкладку VBA-Excel.
- В меню Связи выбрать команду Разорвать все связи.
Код на VBA
Код макроса удаляющего все связи с книгой представлен ниже. Можете скопировать его в свой проект.
Как разорваться связи только в выделенном диапазоне
Иногда в книге имеется много связей и есть опасения, что при удалении связи можно удалить лишнюю. Чтобы этого избежать с помощью надстройки можно удалить связи только в выделенном диапазоне. Для этого:
- Выделите диапазон данных.
- Перейдите на вкладку VBA-Excel (доступна после установки).
- В меню Связи выберите команду Разорвать связи в выделенных ячейках.
Источник
Метод Workbook.UpdateLink (Excel)
Обновления ссылку Microsoft Excel, DDE или OLE (или ссылки).
Синтаксис
expression. UpdateLink (имя, тип)
Выражение Переменная, представляющая объект Workbook .
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Name | Необязательно заполнять. | Variant | Имя обновляемой ссылки Microsoft Excel или DDE/OLE, возвращенное методом LinkSources . |
Type | Необязательный | Variant | Одна из констант XlLinkType , указывающая тип ссылки. |
Замечания
Если метод UpdateLink вызывается без каких-либо параметров, Excel по умолчанию обновляет все ссылки на лист.
Пример
В этом примере обновляются все ссылки в активной книге.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Paul te Braak
Business Intelligence Blog
Changing Excel Table Connections in VBA
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);
Or, we could change the query type of an Command, and provide its text. This would suffice for that;
li.QueryTable.CommandText = “select * from dbo.DimEmployee”
That’s about it, we can change the tables connection, its query and have these changes reflected in our table.
Источник
Невозможно разорвать связи с другой книгой
Прежде чем разобрать причины ошибки разрыва связей, не лишним будет разобраться что такое вообще связи в 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
Предположу, что большинство такими ссылками не удивишь. Такие ссылки так же принято называть связыванием книг. Поэтому как только создается такая ссылка на вкладке Данные (Data) в группе Запросы и подключения (Queries & Coonections) активируется кнопка Изменить связи (Edit Links) . Там же, как несложно догадаться, их можно изменить. В большинстве случаев ни использование связей, ни их изменение не доставляет особых проблем. Даже если в книге источники были изменены значения ячеек, то при открытии книги со связью эти изменения будут так же автоматом обновлены. Но если книгу-источник переместили или переименовали — при следующем открытии книги со ссылками на неё Excel покажет сообщение о недоступных связях в книге и запрос на обновление этих ссылок:
Если нажать Продолжить , то ссылки обновлены не будут и в ячейках будут оставлены значения на момент последнего сохранения. Происходит это потому, что ссылки хранятся внутри самой книги и так же там хранятся значения этих ссылок. Если же нажать Изменить связи (Change Source) , то появится окно изменения связей, где можно будет выбрать каждую связь и указать правильное расположение нужного файла:
Так же изменение связей доступно непосредственно из вкладки Данные (Data)
Как разорвать связи
Как правило связи редко нужны на продолжительное время, т.к. они неизбежно увеличивают размер файла, особенно, если связей много. Поэтому чаще всего связь создается только для единовременно получения данных из другой книги. Исключениями являются случаи, когда связи делаются на общий файл, который ежедневного изменяется и дополняется различными сотрудниками и подразделениями, а в итоговом файле необходимо использовать именно актуальные данные этого файла.
Если решили разорвать связь, необходимо перейти на вкладку Данные (Data) -группа Запросы и подключения (Queries & Coonections) — Изменить связи (Edit Links) :
Выделить нужные связи и нажать Разорвать связь (Break Link) . При этом все ячейки с формулами, содержащими связи, будут преобразованы в значения вычисленные этой формулой при последнем обновлении. Данное действие нельзя будет отменить — только закрытием книги без сохранения.
Так же связи внутри формул разрываются, если формулы просто заменить значениями -выделяем нужные ячейки -копируем их -не снимая выделения жмем Правую кнопку мыши — Специальная вставка (Paste Special) — Значения (Values) . Формулы в ячейках будут заменены результатами их вычислений, а все связи будут удалены.
Более подробно про замену формул значениями можно узнать из статьи: Как удалить в ячейке формулу, оставив значения?
Что делать, если связи не разрываются
Но иногда возникают ситуации, когда вроде все формулы во всех ячейках уже заменены на значения, но запрос на обновление каких-то связей все равно появляется. В этом случае есть парочка рекомендаций для поиска и удаления этих мифических связей:
- проверьте нет ли каких-либо связей в именованных диапазонах:
нажмите сочетание клавиш Ctrl + F3 или перейдите на вкладку Формулы (Formulas) —Диспетчер имен (Name Manager)
Читать подробнее про именованные диапазоны
Если в каком-либо имени есть ссылка с полным путем к какой-то книге(вроде такого ‘[Продажи 2018.xlsx]Отчет’!$A1 ), то такое имя надо либо изменить, либо удалить. Кстати, некоторые имена в итоге могут выдавать ошибку #ССЫЛКА! (#REF!) — к ним тоже стоит присмотреться. Имена с ошибками ничего хорошего как правило не делают.
Настоятельно рекомендую перед удалением имен создать резервную копию файла, т.к. неверное удаление таких имен может повлечь неправильную работу файла даже в случае, если сами ссылки возвращали в итоге ошибочное значение. - если удаление лишних имен не дает эффекта — проверьте условное форматирование:
вкладка Главная (Home) — Условное форматирование (Conditional formatting) — Управление правилами (Manage Rules) . В выпадающем списке проверить каждый лист и условия в нем:
Может случиться так, что условие было создано с использованием ссылки на другие книги. Как правило Excel запрещает это делать, но если ссылка будет внутри какого-то именованного диапазона — то диапазон такой можно будет применить в УФ, но после его удаления в самом УФ это имя все равно остается и генерирует ссылку на файл-источник. Такие условия можно удалять без сомнений — они все равно уже не выполняются как положено и лишь создают «пустую» связь. - Так же не помешает проверить наличие лишних ссылок и среди проверки данных(Что такое проверка данных). Как правило связи могут быть в проверке данных с типом Список. Но как их отыскать, если проверка данных распространена на множество ячеек?
Находим все ячейки с проверкой данных: выделяем одну любую ячейку на листе -вкладка Главная (Home) -группа Редактирование (Editing) — Найти и выделить (Find & Select) — Выделить группу ячеек (Go to Special) . Отмечаем Проверка данных (Data validation) — Всех (All) . Жмем Ок. После этого можно выделить все эти ячейки каким-либо цветом, чтобы удобнее было потом просматривать. Но такой метод выделит ВСЕ ячейки с проверками данных, а не только ошибочные.
Конечно, если вариантов кроме как найти руками нет и ячеек немного – просто заходим в проверку данных каждой ячейки(выделяем эту ячейку -вкладка Данные (Data) — Проверка данных (Data validation) ) и смотрим, есть ли там проблемная формула со ссылками на другие книги.
Можно поступить более кардинально – после того как выделили все ячейки с проверкой данных идем на вкладку Данные (Data) — Проверка данных (Data validation) и для всех ячеек в поле Тип данных (Allow) выбираем Любое значение (Any value) . Это удалит все формулы из проверки данных всех ячеек.
Но если ни удаление всех проверок данных, ни проверка каждой ячейки не подходит — я предлагаю коротенький код, который отыщет все такие ссылки быстрее и сэкономит время:
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 ) -создать стандартный модуль(Insert —Module) и в него вставить скопированный текст. После чего вызвать макросы( Alt + F8 или вкладка Разработчик — Макросы ), выбрать FindErrLink и нажать выполнить.
Есть пара нюансов:
- Прежде чем искать ненужную связь необходимо определить её ссылку: Данные (Data) -группа Запросы и подключения (Queries & Coonections) — Изменить связи (Edit Links) . Запомнить имя файла и записать в этой строке внутри кавычек:
Const sToFndLink$ = «*продажи 2018*»
Имя файла можно записать не полностью, все пробелы и другие символы можно заменить звездочкой дабы не ошибиться. Текст внутри кавычек должен быть в нижнем регистре. Например, на картинках выше есть связь с файлом «Продажи 2018.xlsx» , но я внутри кода записал «*продажи 2018*» — будет найдена любая связь, в имени которой есть «продажи 2018» . - Код ищет проверки данных только на активном листе
- Код только выделяет все найденные ячейки(обычное выделение), он ничего сам не удаляет
- Если надо подсветить ячейки цветом — достаточно убрать апостроф(‘) перед строкой
rres.Interior.Color = vbRed ‘если надо выделить еще и цветом
Как правило после описанных выше действий лишних связей остаться не должно. Но если вдруг связи остались и найти Вы их никак не можете или по каким-то причинам разорвать связи не получается(например, лист со связью защищен)- можно пойти совершенно иным путем. Действует этот рецепт только для файлов новых форматов Excel 2007 и выше (если проблема с файлом более старого формата — можно пересохранить в новый формат):
- Обязательно делаем резервную копию файла, связи в котором никак не хотят разрываться
- Открываем файл при помощи любого архиватора(WinRAR отлично справляется, но это может быть и другой, работающий с форматом ZIP)
- В архиве перейти в папку xl ->externalLinks
- Сколько связей содержится в файле, столько файлов вида externalLink1.xml и будет внутри. Файлы просто пронумерованы и никаких сведений о том, к какому конкретному файлу относится эта связь на поверхности нет. Чтобы узнать какой файл .xml к какой связи относится надо зайти в папку «_rels» и открыть там каждый из имеющихся файлов вида externalLink1.xml.rels . Там и будет содержаться имя файла-источника.
- Если надо удалить только связь на конкретный файл — удаляем только те externalLink1.xml.rels и externalLink1.xml , которые относятся к нему. Если удалить надо все связи — удаляем все содержимое папки externalLinks
- Закрываем архив
- Открываем файл в Excel. Появится сообщение об ошибке вроде «Ошибка в части содержимого в Книге . «. Соглашаемся. Появится еще одно окно с перечислением ошибочного содержимого. Нажимаем закрыть.
После этого связи должны быть удалены.
Если и это не помогло — скорее всего «битая» связь связана с ошибкой самого файла и лучшим решением будет перенести все данные в новый файл.
Статья помогла? Поделись ссылкой с друзьями!
Источник
Хитрости »
30 Декабрь 2018 78687 просмотров
Невозможно разорвать связи с другой книгой
Прежде чем разобрать причины ошибки разрыва связей, не лишним будет разобраться что такое вообще связи в 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
Предположу, что большинство такими ссылками не удивишь. Такие ссылки так же принято называть связыванием книг. Поэтому как только создается такая ссылка на вкладке Данные(Data) в группе Запросы и подключения(Queries & Coonections) активируется кнопка Изменить связи(Edit Links). Там же, как несложно догадаться, их можно изменить. В большинстве случаев ни использование связей, ни их изменение не доставляет особых проблем. Даже если в книге источники были изменены значения ячеек, то при открытии книги со связью эти изменения будут так же автоматом обновлены. Но если книгу-источник переместили или переименовали — при следующем открытии книги со ссылками на неё Excel покажет сообщение о недоступных связях в книге и запрос на обновление этих ссылок:
Если нажать Продолжить, то ссылки обновлены не будут и в ячейках будут оставлены значения на момент последнего сохранения. Происходит это потому, что ссылки хранятся внутри самой книги и так же там хранятся значения этих ссылок. Если же нажать Изменить связи(Change Source), то появится окно изменения связей, где можно будет выбрать каждую связь и указать правильное расположение нужного файла:
Так же изменение связей доступно непосредственно из вкладки Данные(Data)
Как разорвать связи
Как правило связи редко нужны на продолжительное время, т.к. они неизбежно увеличивают размер файла, особенно, если связей много. Поэтому чаще всего связь создается только для единовременно получения данных из другой книги. Исключениями являются случаи, когда связи делаются на общий файл, который ежедневного изменяется и дополняется различными сотрудниками и подразделениями, а в итоговом файле необходимо использовать именно актуальные данные этого файла.
Если решили разорвать связь, необходимо перейти на вкладку
Данные(Data)
-группа
Запросы и подключения(Queries & Coonections)
—
Изменить связи(Edit Links)
:
Выделить нужные связи и нажать
Разорвать связь(Break Link)
. При этом все ячейки с формулами, содержащими связи, будут преобразованы в значения вычисленные этой формулой при последнем обновлении. Данное действие нельзя будет отменить — только закрытием книги без сохранения.
Так же связи внутри формул разрываются, если формулы просто заменить значениями -выделяем нужные ячейки -копируем их -не снимая выделения жмем
Правую кнопку мыши
—
Специальная вставка(Paste Special)
—
Значения(Values)
. Формулы в ячейках будут заменены результатами их вычислений, а все связи будут удалены.
Более подробно про замену формул значениями можно узнать из статьи: Как удалить в ячейке формулу, оставив значения?
Что делать, если связи не разрываются
Но иногда возникают ситуации, когда вроде все формулы во всех ячейках уже заменены на значения, но запрос на обновление каких-то связей все равно появляется. В этом случае есть парочка рекомендаций для поиска и удаления этих мифических связей:
- проверьте нет ли каких-либо связей в именованных диапазонах:
нажмите сочетание клавиш Ctrl+F3 или перейдите на вкладку Формулы(Formulas) —Диспетчер имен(Name Manager)
Читать подробнее про именованные диапазоны
Если в каком-либо имени есть ссылка с полным путем к какой-то книге(вроде такого ‘[Продажи 2018.xlsx]Отчет’!$A1), то такое имя надо либо изменить, либо удалить. Кстати, некоторые имена в итоге могут выдавать ошибку #ССЫЛКА!(#REF!) — к ним тоже стоит присмотреться. Имена с ошибками ничего хорошего как правило не делают.
Настоятельно рекомендую перед удалением имен создать резервную копию файла, т.к. неверное удаление таких имен может повлечь неправильную работу файла даже в случае, если сами ссылки возвращали в итоге ошибочное значение. - если удаление лишних имен не дает эффекта — проверьте условное форматирование:
вкладка Главная(Home) —Условное форматирование(Conditional formatting) —Управление правилами(Manage Rules). В выпадающем списке проверить каждый лист и условия в нем:
Может случиться так, что условие было создано с использованием ссылки на другие книги. Как правило Excel запрещает это делать, но если ссылка будет внутри какого-то именованного диапазона — то диапазон такой можно будет применить в УФ, но после его удаления в самом УФ это имя все равно остается и генерирует ссылку на файл-источник. Такие условия можно удалять без сомнений — они все равно уже не выполняются как положено и лишь создают «пустую» связь. - Так же не помешает проверить наличие лишних ссылок и среди проверки данных(Что такое проверка данных). Как правило связи могут быть в проверке данных с типом Список. Но как их отыскать, если проверка данных распространена на множество ячеек?
Находим все ячейки с проверкой данных: выделяем одну любую ячейку на листе -вкладка Главная(Home) -группа Редактирование(Editing) —Найти и выделить(Find & Select) —Выделить группу ячеек(Go to Special). Отмечаем Проверка данных(Data validation) —Всех(All). Жмем Ок. После этого можно выделить все эти ячейки каким-либо цветом, чтобы удобнее было потом просматривать. Но такой метод выделит ВСЕ ячейки с проверками данных, а не только ошибочные.
Конечно, если вариантов кроме как найти руками нет и ячеек немного – просто заходим в проверку данных каждой ячейки(выделяем эту ячейку -вкладка Данные(Data) —Проверка данных(Data validation)) и смотрим, есть ли там проблемная формула со ссылками на другие книги.
Можно поступить более кардинально – после того как выделили все ячейки с проверкой данных идем на вкладку Данные(Data) —Проверка данных(Data validation) и для всех ячеек в поле Тип данных(Allow) выбираем Любое значение(Any value). Это удалит все формулы из проверки данных всех ячеек.
Но если ни удаление всех проверок данных, ни проверка каждой ячейки не подходит — я предлагаю коротенький код, который отыщет все такие ссылки быстрее и сэкономит время: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) -создать стандартный модуль(Insert —Module) и в него вставить скопированный текст. После чего вызвать макросы(Alt+F8 или вкладка Разработчик —Макросы), выбрать FindErrLink и нажать выполнить.
Есть пара нюансов:- Прежде чем искать ненужную связь необходимо определить её ссылку: Данные(Data) -группа Запросы и подключения(Queries & Coonections) —Изменить связи(Edit Links). Запомнить имя файла и записать в этой строке внутри кавычек:
Const sToFndLink$ = «*продажи 2018*»
Имя файла можно записать не полностью, все пробелы и другие символы можно заменить звездочкой дабы не ошибиться. Текст внутри кавычек должен быть в нижнем регистре. Например, на картинках выше есть связь с файлом «Продажи 2018.xlsx», но я внутри кода записал «*продажи 2018*» — будет найдена любая связь, в имени которой есть «продажи 2018». - Код ищет проверки данных только на активном листе
- Код только выделяет все найденные ячейки(обычное выделение), он ничего сам не удаляет
- Если надо подсветить ячейки цветом — достаточно убрать апостроф(‘) перед строкой
rres.Interior.Color = vbRed ‘если надо выделить еще и цветом
- Прежде чем искать ненужную связь необходимо определить её ссылку: Данные(Data) -группа Запросы и подключения(Queries & Coonections) —Изменить связи(Edit Links). Запомнить имя файла и записать в этой строке внутри кавычек:
Как правило после описанных выше действий лишних связей остаться не должно. Но если вдруг связи остались и найти Вы их никак не можете или по каким-то причинам разорвать связи не получается(например, лист со связью защищен)- можно пойти совершенно иным путем. Действует этот рецепт только для файлов новых форматов Excel 2007 и выше (если проблема с файлом более старого формата — можно пересохранить в новый формат):
- Обязательно делаем резервную копию файла, связи в котором никак не хотят разрываться
- Открываем файл при помощи любого архиватора(WinRAR отлично справляется, но это может быть и другой, работающий с форматом ZIP)
- В архиве перейти в папку xl -> externalLinks
- Сколько связей содержится в файле, столько файлов вида externalLink1.xml и будет внутри. Файлы просто пронумерованы и никаких сведений о том, к какому конкретному файлу относится эта связь на поверхности нет. Чтобы узнать какой файл .xml к какой связи относится надо зайти в папку «_rels» и открыть там каждый из имеющихся файлов вида externalLink1.xml.rels. Там и будет содержаться имя файла-источника.
- Если надо удалить только связь на конкретный файл — удаляем только те externalLink1.xml.rels и externalLink1.xml, которые относятся к нему. Если удалить надо все связи — удаляем все содержимое папки externalLinks
- Закрываем архив
- Открываем файл в Excel. Появится сообщение об ошибке вроде «Ошибка в части содержимого в Книге …». Соглашаемся. Появится еще одно окно с перечислением ошибочного содержимого. Нажимаем закрыть.
После этого связи должны быть удалены.
Если и это не помогло — скорее всего «битая» связь связана с ошибкой самого файла и лучшим решением будет перенести все данные в новый файл.
Так же см.:
Найти скрытые связи
Оптимизировать книгу
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Группа: Проверенные Ранг: Форумчанин Сообщений: 190
Замечаний: |
frukti4ek, Универсального не знаю, но пример изменения всех связей активной книги дам
[vba]
Код
Sub ChangeLinks()
‘Прописываем имя новой книги для связи
Name = «C:422538.xlsx»
With ActiveWorkbook
aLinks = .LinkSources(xlExcelLinks)
If Not IsEmpty(aLinks) Then
For i = 1 To UBound(aLinks)
.ChangeLink Name:=aLinks(i), NewName:=Name, Type:=xlExcelLinks
Next i
.UpdateLinks = xlUpdateLinksUserSetting
.RefreshAll
End If
End With
End Sub
[/vba]
Сообщение отредактировал miver — Пятница, 09.10.2015, 13:38
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 раскрывающемся списке.
- Введите или вставьте код во вновь созданном модуле.
Обращение к ячейке в другой книге Excel из кода VBA по ссылке, содержащейся в ячейке текущей книги. Переход по ссылке в другую книгу. Примеры.
Ссылки на другую книгу
В ячейку «A1» листа «Лист6» текущей книги вставлена ссылка на ячейку «C12» листа «Лист1» книги «Другая книга.xlsm».
Ссылка в ячейке, если книга «Другая книга.xlsm» открыта:
=‘[Другая книга.xlsm]Лист1’!$C$12 |
Ссылка в ячейке, если книга «Другая книга.xlsm» закрыта:
=‘C:UsersEvgeniyDesktop[Другая книга.xlsm]Лист1’!$C$12 |
Если путь до ячеек содержит пробелы, как в этом примере, он заключается в апострофы.
Перед обращением к другой книге необходимо проверить – открыта ли она. Если книга закрыта, ее следует открыть. Один из вариантов кода смотрите в параграфе «Примеры обращения к другой книге».
Обращение к ячейке по ссылке
Обращение из кода VBA Excel к ячейке в другой книге для определения ее координат по ссылке из ячейки «Лист6!A1» текущей книги:
MsgBox Range(ThisWorkbook.Sheets(«Лист6»).Range(«A1»).Formula).Row ‘Результат = 12 MsgBox Range(ThisWorkbook.Sheets(«Лист6»).Range(«A1»).Formula).Column ‘Результат = 3 |
Примеры обращения к другой книге
Условие
В ячейке «A1» листа «Лист6» текущей книги размещена ссылка: ='[Другая книга.xlsm]Лист1'!$C$12
. Необходимо перейти по ссылке из ячейки «Лист6!A1» в другую книгу, скопировать диапазон из 9 ячеек (3х3) в другой книге, где первой ячейкой диапазона является ячейка из ссылки, и вставить скопированный диапазон в диапазон «Лист6!A2:C4» текущей книги.
Решение
Если точно известно, что другая книга открыта:
Sub Primer1() With ThisWorkbook.Sheets(«Лист6») Range(.Range(«A1»).Formula).Resize(3, 3).Copy .Range(«A2:C4») End With End Sub |
Если неизвестно, открыта другая книга или нет:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
‘Функция для проверки состояния книги (открыта или нет) Function BookOpenClosed(wbName As String) As Boolean Dim myBook As Workbook On Error Resume Next Set myBook = Workbooks(wbName) BookOpenClosed = Not myBook Is Nothing End Function Sub Primer2() Dim s1 As String, s2 As String, s3 As String, n1 As Long, n2 As Long ‘записываем ссылку из ячейки Лист6!A1 в переменную s1 s1 = ThisWorkbook.Sheets(«Лист6»).Range(«A1»).Formula ‘вырезаем имя книги из ссылки и записываем в переменную s2 n1 = InStr(s1, «[«) n2 = InStr(s1, «]») s2 = Mid(s1, n1 + 1, n2 — n1 — 1) ‘проверяем состояние книги If Not BookOpenClosed(s2) Then ‘если книга закрыта, вырезаем путь к ней из ссылки и записываем в переменную s3 n1 = InStr(s1, «:») — 1 n2 = InStrRev(s1, ««) s3 = Mid(s1, n1, n2 — n1 + 1) ‘открываем другую книгу, объединив путь к ней и ее имя Workbooks.Open (s3 & s2) End If ‘копируем ячейки из другой книги в текущую Range(s1).Resize(3, 3).Copy ThisWorkbook.Sheets(«Лист6»).Range(«A2:C4») End Sub |
И еще один вариант кода VBA Excel для случаев, когда неизвестно, открыта книга или нет. Здесь просто осуществляется попытка открыть книгу, и она будет открыта, если в ячейке содержится ее полное имя, включая диск и подкаталоги. В случае возникновения ошибки, управление будет передано следующей строке.
Sub Primer3() Dim s1 As String, s2 As String, n1 As Long, n2 As Long ‘записываем ссылку из ячейки Лист6!A1 в переменную s1 s1 = ThisWorkbook.Sheets(«Лист6»).Range(«A1»).Formula ‘вырезаем полное имя книги из ссылки и записываем в переменную s2 On Error Resume Next n1 = InStr(s1, «:») — 1 n2 = InStrRev(s1, «]«) s2 = Mid(s1, n1, n2 — n1) s2 = Replace(s2, «[«, ««) ‘пробуем открыть книгу, если она не открыта Workbooks.Open (s2) On Error GoTo 0 ‘копируем ячейки из другой книги в текущую Range(s1).Resize(3, 3).Copy ThisWorkbook.Sheets(«Лист6«).Range(«A2:C4«) End Sub |
Переход к ячейке по адресу из формулы рабочего листа в пределах одной книги смотрите в следующей статье.
1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
|
1 |
|
Создание связей программно23.03.2012, 01:18. Показов 2903. Ответов 17
Здравствуйте. Мне нужно создать 10 excel файл и сделать связь остальных 9 с ним. Можно ли сделать через VBA связи(кодом) 2)
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
23.03.2012, 01:18 |
Ответы с готовыми решениями: Создание связей в JPA и таблиц на основе этих связей В моём скрине были созданны empoyee_id и manager_id как FK… создание связей Создание связей Разработайте базу данных «Электронная… Создание связей 17 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
23.03.2012, 09:32 |
2 |
Как сделать так что бы он сам при открытии не обнавлялся а только по нажатию кнопки Написать процедуру изъятия данных и назначить её кнопке
0 |
npqHuK 1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
||||
23.03.2012, 13:01 [ТС] |
3 |
|||
Вроде так работает.
0 |
2784 / 716 / 106 Регистрация: 04.02.2011 Сообщений: 1,443 |
|
23.03.2012, 13:39 |
4 |
С тем, что было сказано в топике кода Вам никто не напишет. Выкладывайте лучше пример ваших 9 файлов и набросок 10-го файла, как вы хотите его получить. Иначе про выбор цвета и т.д. никто не угадает (раз речь шла только о ф.и.о.) — здесь экстрасенсов нет. В общем случае файл 10 должен иметь отведенное место с именами и путями к 9 другим файлам. Макрос опочередно берет имя файла, открывает его, копипует из него значения, закрывает и так со всеми файлами, в каждом из которых надо определить количество строк для копирования. Чтобы потом знать, какие цифры брались из какого файла можно завести дополнительный столбец с именем файла. Как-то так, но лучше выложить примеры файлов для работы!
0 |
npqHuK 1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
||||
24.03.2012, 00:00 [ТС] |
5 |
|||
Как доделаю скину код……….может кому понадобится………осталось немножко. Добавлено через 5 минут Добавлено через 25 минут
Вот так в листах 1-9 у меня получатся значения а не ссылки.
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
24.03.2012, 10:27 |
6 |
Я копирую с листа значения которые приходят через связи и получаю СВЯЗЬ за место ЗНАЧЕНИЯ!!! А не проще сразу не делать связи,а брать значения?
0 |
1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
|
25.03.2012, 14:36 [ТС] |
7 |
Либо вы меня не понимаете либо я вас.
0 |
Alex77755 11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
||||||||||||
25.03.2012, 19:01 |
8 |
|||||||||||
Сообщение было отмечено как решение РешениеЯ говорю мне не надо открывать остальные 9 файлов А никто не говорит, что файлы надо открывать самому. Это должна сделать программа. 19 Листов….по 500 строк взять на всякий случай 500 вместо 19. Занять 9500 строк. 4% из которых будут нести информацию. В VBA не существует метода получения значения из закрытого файла рабочей
Функция GetValue имеет четыре аргумента:
Ниже приведен еще один пример. Эта процедура считывает 1200 значений
3 |
17992 / 7618 / 890 Регистрация: 25.12.2011 Сообщений: 11,351 Записей в блоге: 17 |
|
25.03.2012, 20:05 |
9 |
Если данные однотипные использовать ADO, но это сложнее Alex77755, тоже нашел. Забираю код в копилку.
0 |
1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
|
26.03.2012, 09:44 [ТС] |
10 |
Я начинал делать с открытия файлов……причем тоже делал книги невидимыми.но не на шел как через ВБА потом закрыть эксел в процессах.
0 |
Dragokas |
||||
26.03.2012, 11:00
#11 |
||||
Не по теме: npqHuK,
0 |
npqHuK 1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
||||
27.03.2012, 16:21 [ТС] |
12 |
|||
Что за глупость….абсолютно одинаковые по полям……..чуток разные по количеству строк но ТОт что =больше по кол-ву строк загружается через циклы за 6 сек а остальные с меньшим кол0вом строк грузятся 34+ секунд!!Что за вздор! ( Добавлено через 19 минут
Не обьясните случаем почему!?
0 |
693 / 99 / 10 Регистрация: 25.06.2011 Сообщений: 718 |
|
27.03.2012, 19:28 |
13 |
npqHuK, не проще все в одном цикле сделать
0 |
1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
|
29.03.2012, 11:18 [ТС] |
14 |
У меня другая проблемка……… Так вот при открытии файла Лист2 я вижу что все пустые ячейки стали со значением 0.как это исправить подскажите! Добавлено через 23 часа 40 минут
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
29.03.2012, 13:47 |
15 |
Сервис-параметры-вид. снять галку «нулевые значения»
0 |
1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
|
29.03.2012, 15:24 [ТС] |
16 |
а в 2010 как?! Добавлено через 34 минуты
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
29.03.2012, 15:36 |
17 |
1.=ЕСЛИ(формула=0;»»;формула)
0 |
1 / 1 / 0 Регистрация: 21.11.2011 Сообщений: 43 |
|
29.03.2012, 15:44 [ТС] |
18 |
Не понял вас малость……….как сделать тот же MsgBox только что бы когда он вылезал моё обновление продолжалось ане останавливалось
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
29.03.2012, 15:44 |
18 |
Связи в эксель
Как разорвать связи в Excel
Описание проблемы
Когда в формуле вы указываете ссылку на другую книгу, то Excel образует с ней связь. Эта связь будет прекрасно работать и обновляться автоматически в том случае, когда открыты обе книги.
К сожалению, если книга-источник была удалена/перемещена или переименована, то связь нарушится. Также связь будет потеряна если вы переместите конечный файл (содержащий ссылку). Если вы передадите только конечный файл по почте, то получатель тоже не сможет обновить связи.
При нарушении связи, ячейки со ссылками на другие книги будут содержать ошибки #ССЫЛКА.
Как разорвать связь
Один из способов решения данной проблемы — разрыв связи. Если в файле только одна связь, то сделать это довольно просто:
- Перейдите на вкладку Данные.
- Выберите команду Изменить связи в разделе Подключения.
- Нажмите Разорвать связь.
ВАЖНО! При разрыве связи все формулы ссылающиеся на книгу-источник будут преобразованы в значения! Отмена данной операции невозможна!
Как разорвать связь со всеми книгами
Для удобства, можно воспользоваться макросом, который разорвет связи со всеми книгами. Макрос входит в состав надстройки VBA-Excel. Чтобы им воспользоваться необходимо:
- Перейти на вкладку VBA-Excel.
- В меню Связи выбрать команду Разорвать все связи.
Код на VBA
Код макроса удаляющего все связи с книгой представлен ниже. Можете скопировать его в свой проект.
Как разорваться связи только в выделенном диапазоне
Иногда в книге имеется много связей и есть опасения, что при удалении связи можно удалить лишнюю. Чтобы этого избежать с помощью надстройки можно удалить связи только в выделенном диапазоне. Для этого:
- Выделите диапазон данных.
- Перейдите на вкладку VBA-Excel (доступна после установки).
- В меню Связи выберите команду Разорвать связи в выделенных ячейках.
Создание связи между двумя таблицами в Excel
Вы применяли функцию ВПР, чтобы переместить данные столбца из одной таблицы в другой? Так как в Excel теперь есть встроенная модель данных, функция ВПР устарела. Вы можете создать связь между двумя таблицами на основе совпадающих данных в них. Затем можно создать листы Power View или сводные таблицы и другие отчеты с полями из каждой таблицы, даже если они получены из различных источников. Например, если у вас есть данные о продажах клиентам, вам может потребоваться импортировать и связать данные логики операций со временем, чтобы проанализировать тенденции продаж по годам и месяцам.
Все таблицы в книге указываются в списках полей сводной таблицы и Power View.
При импорте связанных таблиц из реляционной базы данных Excel часто может создавать эти связи в модели данных, формируемой в фоновом режиме. В других случаях необходимо создавать связи вручную.
Убедитесь, что книга содержит хотя бы две таблицы и в каждой из них есть столбец, который можно сопоставить со столбцом из другой таблицы.
Присвойте каждой из таблиц понятное имя: На вкладке Работа с таблицами щелкните Конструктор > Имя таблицы и введите имя.
Убедитесь, что столбец в одной из таблиц имеет уникальные значения без дубликатов. Excel может создавать связи только в том случае, если один столбец содержит уникальные значения.
Например, чтобы связать продажи клиента с логикой операций со временем, обе таблицы должны включать дату в одинаковом формате (например, 01.01.2012) и по крайней мере в одной таблице (логика операций со временем) должны быть перечислены все даты только один раз в столбце.
Щелкните Данные> Отношения.
Если команда Отношения недоступна, значит книга содержит только одну таблицу.
В окне Управление связями нажмите кнопку Создать.
В окне Создание связи щелкните стрелку рядом с полем Таблица и выберите таблицу из раскрывающегося списка. В связи «один ко многим» эта таблица должна быть частью с несколькими элементами. В примере с клиентами и логикой операций со временем необходимо сначала выбрать таблицу продаж клиентов, потому что каждый день, скорее всего, происходит множество продаж.
Для элемента Столбец (чужой) выберите столбец, который содержит данные, относящиеся к элементу Связанный столбец (первичный ключ). Например, при наличии столбца даты в обеих таблицах необходимо выбрать этот столбец именно сейчас.
В поле Связанная таблица выберите таблицу, содержащую хотя бы один столбец данных, которые связаны с таблицей, выбранной в поле Таблица.
В поле Связанный столбец (первичный ключ) выберите столбец, содержащий уникальные значения, которые соответствуют значениям в столбце, выбранном в поле Столбец.
Нажмите кнопку ОК.
Дополнительные сведения о связях между таблицами в Excel
Примечания о связях
Вы узнаете, существуют ли связи, при перетаскивании полей из разных таблиц в список полей сводной таблицы. Если вам не будет предложено создать связь, то в Excel уже есть сведения, необходимые для связи данных.
Создание связей похоже на использование Влукупс: вам понадобятся столбцы с соответствующими данными, чтобы приложение Excel могло перекрестно ссылаться на строки в одной таблице с помощью других таблиц. В примере логики операций со временем в таблице клиента должны быть указаны значения даты, которые также есть в таблице операций со временем.
В модели данных связи таблиц могут быть типа «один к одному» (у каждого пассажира есть один посадочный талон) или «один ко многим» (в каждом рейсе много пассажиров), но не «многие ко многим». Связи «многие ко многим» приводят к ошибкам циклической зависимости, таким как «Обнаружена циклическая зависимость». Эта ошибка может произойти, если вы создаете прямое подключение между двумя таблицами со связью «многие ко многим» или непрямые подключения (цепочку связей таблиц, в которой каждая таблица связана со следующей отношением «один ко многим», но между первой и последней образуется отношение «многие ко многим»). Дополнительные сведения см. в статье Связи между таблицами в модели данных.
Типы данных в двух столбцах должны быть совместимы. Подробные сведения см. в статье Типы данных в моделях данных.
Другие способы создания связей могут оказаться более понятными, особенно если неизвестно, какие столбцы использовать. Дополнительные сведения см. в статье Создание связи в представлении диаграммы в Power Pivot.
Пример. Связывание данных логики операций со временем с данными по рейсам авиакомпании
Вы можете узнать о связях обеих таблиц и логики операций со временем с помощью свободных данных на Microsoft Azure Marketplace. Некоторые из этих наборов данных очень велики, и для их загрузки за разумное время необходимо быстрое подключение к Интернету.
Нажмите Получение внешних данных > Из службы данных > Из Microsoft Azure Marketplace. В мастере импорта таблиц откроется домашняя страница Microsoft Azure Marketplace.
В разделе Price (Цена) нажмите Free (Бесплатно).
В разделе Category (Категория) нажмите Science & Statistics (Наука и статистика).
Найдите DateStream и нажмите кнопку Subscribe (Подписаться).
Введите свои учетные данные Майкрософт и нажмите Sign in (Вход). Откроется окно предварительного просмотра данных.
Прокрутите вниз и нажмите Select Query (Запрос на выборку).
Нажмите кнопку Далее.
Чтобы импортировать данные, выберите BasicCalendarUS и нажмите Готово. При быстром подключении к Интернету импорт займет около минуты. После выполнения вы увидите отчет о состоянии перемещения 73 414 строк. Нажмите кнопку Закрыть.
Чтобы импортировать второй набор данных, нажмите Получение внешних данных > Из службы данных > Из Microsoft Azure Marketplace.
В разделе Type (Тип) нажмите Data Данные).
В разделе Price (Цена) нажмите Free (Бесплатно).
Найдите US Air Carrier Flight Delays и нажмите Select (Выбрать).
Прокрутите вниз и нажмите Select Query (Запрос на выборку).
Нажмите кнопку Далее.
Нажмите Готово для импорта данных. При быстром подключении к Интернету импорт займет около 15 минут. После выполнения вы увидите отчет о состоянии перемещения 2 427 284 строк. Нажмите Закрыть. Теперь у вас есть две таблицы в модели данных. Чтобы связать их, нужны совместимые столбцы в каждой таблице.
Убедитесь, что значения в столбце DateKey в таблице BasicCalendarUS указаны в формате 01.01.2012 00:00:00. В таблице On_Time_Performance также есть столбец даты и времени FlightDate, значения которого указаны в том же формате: 01.01.2012 00:00:00. Два столбца содержат совпадающие данные одинакового типа и по крайней мере один из столбцов (DateKey) содержит только уникальные значения. В следующих действиях вы будете использовать эти столбцы, чтобы связать таблицы.
В окне Power Pivot нажмите Сводная таблица, чтобы создать сводную таблицу на новом или существующем листе.
В списке полей разверните таблицу On_Time_Performance и нажмите ArrDelayMinutes, чтобы добавить их в область значений. В сводной таблице вы увидите общее время задержанных рейсов в минутах.
Разверните таблицу BasicCalendarUS и нажмите MonthInCalendar, чтобы добавить его в область строк.
Обратите внимание, что теперь в сводной таблице перечислены месяцы, но количество минут одинаковое для каждого месяца. Нужны одинаковые значения, указывающие на связь.
В списке полей, в разделе «Могут потребоваться связи между таблицами» нажмите Создать.
В поле «Связанная таблица» выберите On_Time_Performance, а в поле «Связанный столбец (первичный ключ)» — FlightDate.
В поле «Таблица» выберитеBasicCalendarUS, а в поле «Столбец (чужой)» — DateKey. Нажмите ОК для создания связи.
Обратите внимание, что время задержки в настоящее время отличается для каждого месяца.
В таблице BasicCalendarUS перетащите YearKey в область строк над пунктом MonthInCalendar.
Теперь вы можете разделить задержки прибытия по годам и месяцам, а также другим значениям в календаре.
Советы: По умолчанию месяцы перечислены в алфавитном порядке. С помощью надстройки Power Pivot вы можете изменить порядок сортировки так, чтобы они отображались в хронологическом порядке.
Таблица BasicCalendarUS должна быть открыта в окне Power Pivot.
В главной таблице нажмите Сортировка по столбцу.
В поле «Сортировать» выберите MonthInCalendar.
В поле «По» выберите MonthOfYear.
Сводная таблица теперь сортирует каждую комбинацию «месяц и год» (октябрь 2011, ноябрь 2011) по номеру месяца в году (10, 11). Изменить порядок сортировки несложно, потому что канал DateStream предоставляет все необходимые столбцы для работы этого сценария. Если вы используете другую таблицу логики операций со временем, ваши действия будут другими.
«Могут потребоваться связи между таблицами»
По мере добавления полей в сводную таблицу вы получите уведомление о необходимости связи между таблицами, чтобы разобраться с полями, выбранными в сводной таблице.
Хотя Excel может подсказать вам, когда необходима связь, он не может подсказать, какие таблицы и столбцы использовать, а также возможна ли связь между таблицами. Чтобы получить ответы на свои вопросы, попробуйте сделать следующее.
Шаг 1. Определите, какие таблицы указать в связи
Если ваша модель содержит всего лишь несколько таблиц, понятно, какие из них нужно использовать. Но для больших моделей вам может понадобиться помощь. Один из способов заключается в том, чтобы использовать представление диаграммы в надстройке Power Pivot. Представление диаграммы обеспечивает визуализацию всех таблиц в модели данных. С помощью него вы можете быстро определить, какие таблицы отделены от остальной части модели.
Примечание: Можно создавать неоднозначные связи, которые являются недопустимыми при использовании в сводной таблице или отчете Power View. Пусть все ваши таблицы связаны каким-то образом с другими таблицами в модели, но при попытке объединения полей из разных таблиц вы получите сообщение «Могут потребоваться связи между таблицами». Наиболее вероятной причиной является то, что вы столкнулись со связью «многие ко многим». Если вы будете следовать цепочке связей между таблицами, которые подключаются к необходимым для вас таблицам, то вы, вероятно, обнаружите наличие двух или более связей «один ко многим» между таблицами. Не существует простого обходного пути, который бы работал в любой ситуации, но вы можете попробоватьсоздать вычисляемые столбцы, чтобы консолидировать столбцы, которые вы хотите использовать в одной таблице.
Шаг 2. Найдите столбцы, которые могут быть использованы для создания пути от одной таблице к другой
После того как вы определили, какая таблица не связана с остальной частью модели, пересмотрите столбцы в ней, чтобы определить содержит ли другой столбец в другом месте модели соответствующие значения.
Предположим, у вас есть модель, которая содержит продажи продукции по территории, и вы впоследствии импортируете демографические данные, чтобы узнать, есть ли корреляция между продажами и демографическими тенденциями на каждой территории. Так как демографические данные поступают из различных источников, то их таблицы первоначально изолированы от остальной части модели. Для интеграции демографических данных с остальной частью своей модели вам нужно будет найти столбец в одной из демографических таблиц, соответствующий тому, который вы уже используете. Например, если демографические данные организованы по регионам и ваши данные о продажах определяют область продажи, то вы могли бы связать два набора данных, найдя общие столбцы, такие как государство, почтовый индекс или регион, чтобы обеспечить подстановку.
Кроме совпадающих значений есть несколько дополнительных требований для создания связей.
Значения данных в столбце подстановки должны быть уникальными. Другими словами, столбец не может содержать дубликаты. В модели данных нули и пустые строки эквивалентны пустому полю, которое является самостоятельным значением данных. Это означает, что не может быть несколько нулей в столбце подстановок.
Типы данных столбца подстановок и исходного столбца должны быть совместимы. Подробнее о типах данных см. в статье Типы данных в моделях данных.
Подробнее о связях таблиц см. в статье Связи между таблицами в модели данных.
Примечание: Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Была ли информация полезной? Для удобства также приводим ссылку на оригинал (на английском языке).
Блог о программе Microsoft Excel: приемы, хитрости, секреты, трюки
Создание связи между таблицами Excel
Связь между таблицами Excel – это формула, которая возвращает данные с ячейки другой рабочей книги. Когда вы открываете книгу, содержащую связи, Excel считывает последнюю информацию с книги-источника (обновление связей)
Межтабличные связи в Excel используются для получения данных как с других листов рабочей книги, так и с других рабочих книг Excel. К примеру, у вас имеется таблица с расчетом итоговой суммы продаж. В расчете используются цены на продукт и объем продаж. В таком случае имеет смысл создать отдельную таблицу с данными по ценам, которые будут подтягиваться с помощью связей первой таблицы.
Когда вы создаете связь между таблицами, Excel создает формулу, которая включает в себя имя исходной книги, заключенную в скобки [], имя листа с восклицательным знаком на конце и ссылку на ячейку.
Создание связей между рабочими книгами
- Открываем обе рабочие книги в Excel
- В исходной книге выбираем ячейку, которую необходимо связать, и копируем ее (сочетание клавиш Ctrl+С)
- Переходим в конечную книгу, щелкаем правой кнопкой мыши по ячейке, куда мы хотим поместить связь. Из выпадающего меню выбираем Специальная вставка
- В появившемся диалоговом окне Специальная вставка выбираем Вставить связь.
Есть еще один, более простой, вариант создания связи между таблицами. В ячейку, куда мы хотим вставить связь, ставим знак равенства (так же как и для обычной формулы), переходим в исходную книгу, выбираем ячейку, которую хотим связать, щелкаем Enter.
Вы можете использовать инструменты копирования и автозаполнения для формул связи так же, как и для обычных формул.
Прежде чем создавать связи между таблицами
Прежде чем вы начнете распространять знания на свои грандиозные идеи, прочитайте несколько советов по работе со связями в Excel:
Делайте легко отслеживаемые связи. Не существует автоматического поиска всех ячеек, содержащих ссылки. Поэтому, используйте определенный формат, чтобы быстро идентифицировать связи с другими таблицами, в противном случае, документ, содержащий ссылки, может разрастись до такой степени, что его будет трудно поддерживать.
Автоматические вычисления. Исходная книга должна работать в режиме автоматического вычисления (установлено по умолчанию). Для переключения параметра вычисления перейдите по вкладке Формулы в группу Вычисление. Выберите Параметры вычислений –> Автоматически.
Избегайте циклические ссылки. Циклические связи – когда две рабочие книги содержат ссылки друг на друга – могут быть причиной медленного открытия и работы файла.
Обновление связей
Для ручного обновления связи между таблицами, перейдите по вкладке Данные в группу Подключения. Щелкните по кнопке Изменить связи.
В появившемся диалоговом окне Изменение связей, выберите интересующую вас связь и щелкните по кнопке Обновить.
Разорвать связи в книгах Excel
Разрыв связи с источником приведет к замене существующих формул связи на значения, которые они возвращают. Например, связь =[Источник.xlsx]Цены!$B$4 будет заменена на 16. Разрыв связи нельзя отменить, поэтому прежде чем совершить операцию, рекомендую сохранить книгу.
Перейдите по вкладке Данные в группу Подключения. Щелкните по кнопке Изменить связи. В появившемся диалоговом окне Изменение связей, выберите интересующую вас связь и щелкните по кнопке Разорвать связь.
Вам также могут быть интересны следующие статьи
5 комментариев
Спасибо! очень полезный материал!
Пожалуйста, исправьте опечатку:
«В исходной книге выбираем ячейку, которую необходимо связать, и копируем ее (сочетание клавиш Ctrl+V)»
Думаю должно быть «Ctrl+С»
Формула для создания связи ВПР между двумя таблицами в Excel
Иногда данные, которые нужно найти, могут находится на разных таблицах. Часто приходится делать выборку данных по нескольким таблицам Excel. Пользователь должен иметь возможность определять из какой таблицы делать выборку по критериям условий для того или иного типа данных. Для этого можно создать специальную формулу.
Как связать две таблицы одной формулой для выборки ВПР по условию
Ниже на рисунке представлена таблица для вычисления налоговой суммы. Пользователь имеет возможность определять семейное положение сотрудника (женат или Неженат). Если пользователь выберет условие «Неженат», выборка должна выполнятся по таблице «Неженатые сотрудники». Если будет выбран критерий «Женат» выборка будет произведена по таблице «Женатые сотрудники». Формула для расчета налогов при условии женат или Неженат сотрудник фирмы:
Чтобы создать переключатель между таблицами можно использовать имена диапазонов ячеек и функцию ДВССЫЛ. После чего нужно составить формулу. Необходимо сначала создать два именных диапазона:
- Женат – для таблицы «Женатые сотрудники».
- Неженат – для таблицы «Неженатые сотрудники».
Чтобы присвоить отдельные имена для каждого из диапазонов этих двух таблиц сделайте следующее:
- Выделите диапазон ячеек A3:D10.
- Выберите инструмент: «ФОРМУЛЫ»-«Определенные имена»-«Присвоить имя». Появится окно «Создание имени» как показано на рисунке:
- В поле «Имя:» введите значение – Женат. И нажмите ОК.
- Выделите диапазон ячеек из второй таблицы F3:I10.
- Снова выберите инструмент «Присвоить имя» на вкладке «ФОРМУЛЫ» и заполните поле «Имя:» значением – Неженат, как на рисунке:
- Нажмите Ок.
Для точности и удобства ввода входных значений в ячейке… используется выпадающий список создан инструментом: «ДАННЫЕ»-«Работа с данными»-«Проверка данных»-«Тип данных:»-«Список».
Выпадающий список состоит только из двух значений: «Женат» «Неженат». Точно такие же как названия имен диапазонов ячеек, созданных ранее. Значение ячейки E12 будет использовано для переключения между таблицами при поиске по условию. Поэтому значения и имена диапазонов должны быть идентичны.
В основе данной формулы лежит функция ВПР. Ее второй аргумент где указывается исходная таблица содержит функцию ДВССЫЛ. Данная функция имеет первый аргумент «Ссылка на ячейку», который преобразует входящий текст в ссылку на ячейку или диапазон. На самом первом рисунке ячейка E12 содержит значение «Неженат». Функция ДВССЫЛ пытается преобразовать этот текст в ссылку на ячейку или в имя диапазона. Если текст не преобразовывается в ссылку на ячейку (как в данном примере), тогда функция ДВССЫЛ проверяет нет ли в данной рабочей книге имен диапазонов ячеек с таким же названием. Если небыли бы созданы такие имена диапазонов, тогда функция вернула бы ошибку с кодом #ССЫЛКА!
В синтаксисе функции ДВССЫЛ имеется второй необязательный для заполнения аргумент – называется «A1». Значение ИСТИНА в данном аргументе значит, что ссылка на ячейку записана в формате A1, а значение ЛОЖЬ – формате R1C1. В случае названых имен диапазонов ячеек функция ДВССЫЛ вернет правильный результат в независимости от того, что указано во втором опциональном ее аргументе «A1»: ИСТИНА или ЛОЖЬ.
Функция ДВССЫЛ может также возвращать внешние ссылки на другие листы и даже другие рабочие книги Excel. Но при условии, что рабочая книга, на которую ссылается функция будет открыта. Иначе будет возвращена ошибка с кодом #ССЫЛКА!
Невозможно разорвать связи с другой книгой
Прежде чем разобрать причины ошибки разрыва связей, не лишним будет разобраться что такое вообще связи в 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 ) -создать стандартный модуль(Insert —Module) и в него вставить скопированный текст. После чего вызвать макросы( 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. Появится сообщение об ошибке вроде «Ошибка в части содержимого в Книге . «. Соглашаемся. Появится еще одно окно с перечислением ошибочного содержимого. Нажимаем закрыть.
После этого связи должны быть удалены.
Статья помогла? Поделись ссылкой с друзьями!