Excel vba как удалить связи

Хитрости »

30 Декабрь 2018              78578 просмотров


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

Прежде чем разобрать причины ошибки разрыва связей, не лишним будет разобраться что такое вообще связи в 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
Предположу, что большинство такими ссылками не удивишь. Такие ссылки так же принято называть связыванием книг. Поэтому как только создается такая ссылка на вкладке Данные(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) -создать стандартный модуль(InsertModule) и в него вставить скопированный текст. После чего вызвать макросы(Alt+F8 или вкладка РазработчикМакросы), выбрать FindErrLink и нажать выполнить.
    Есть пара нюансов:

    • Прежде чем искать ненужную связь необходимо определить её ссылку: Данные(Data) -группа Запросы и подключения(Queries & Coonections)Изменить связи(Edit Links). Запомнить имя файла и записать в этой строке внутри кавычек:
      Const sToFndLink$ = «*продажи 2018*»
      Имя файла можно записать не полностью, все пробелы и другие символы можно заменить звездочкой дабы не ошибиться. Текст внутри кавычек должен быть в нижнем регистре. Например, на картинках выше есть связь с файлом «Продажи 2018.xlsx», но я внутри кода записал «*продажи 2018*» — будет найдена любая связь, в имени которой есть «продажи 2018».
    • Код ищет проверки данных только на активном листе
    • Код только выделяет все найденные ячейки(обычное выделение), он ничего сам не удаляет
    • Если надо подсветить ячейки цветом — достаточно убрать апостроф(‘) перед строкой
      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. Появится сообщение об ошибке вроде «Ошибка в части содержимого в Книге …». Соглашаемся. Появится еще одно окно с перечислением ошибочного содержимого. Нажимаем закрыть.

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

Так же см.:
Найти скрытые связи
Оптимизировать книгу


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

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Еще раз уточним…

На листе оригинальной книги есть именованные диапазоны. После копирования листа в новую книгу, эти диапазоны копи/пастятся в виде значений типа:

[vba]

Код

Range(«J11:J400»).Select
Selection.Copy
Range(«J11:J400»).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=False

[/vba]

Остаются только формулы подведения итогов, которые уже не имеют именованных диапазонов. Но связь с книгой не могу порвать, пока не сохраню и не закрою все книги. А закрывать каждый раз не удобно.

Собственно задача, что бы полученный отчет не имел связей с книгой из которой его сделали. Поскольку его будут смотреть на другом компьютере, где нет файла оригинала. Каждый раз закрывать/открывать и удалять связи после создания отчета — слишком неудобно. А тем кому высылаются отчеты мешает запрос восстановления связей.

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

Содержание

  1. Как разорвать связи в Excel
  2. Описание проблемы
  3. Как разорвать связь
  4. Как разорвать связь со всеми книгами
  5. Код на VBA
  6. Как разорваться связи только в выделенном диапазоне
  7. Разорвать связи листа с помощью VBA
  8. 2 ответа 2
  9. Vba excel разорвать все связи
  10. Как в Excel разорвать связи
  11. Что такое связи в Excel
  12. Суть проблемы
  13. Как разорвать связь в Эксель
  14. Как разорвать связь со всеми книгами
  15. Код на VBA
  16. Как разорвать связи только в выделенном диапазоне
  17. Что делать, если связи не разрываются

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

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

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

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

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

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

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

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

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

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

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

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

Код на VBA

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

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

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

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

Источник

Разорвать связи листа с помощью VBA

Каким VBA скриптом можно разорвать все ссылки активного листа на соседние листы той же книги и превратить их в значения? Тоисть если в формуле ячейки задействована ссылка на другой лист превращать эту формулу в значения

2 ответа 2

Можно проверять наличие имени листа в формуле. Вариант не очень хороший.

Пример. В книге есть лист кекс

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

Проверять имя листа с восклицательным знаком (кекс!)? Да. Но этого мало: если имя листа имеет пробелы, в формуле оно окружено апострофами (‘вкусные кексы’!) и само имя отделено от восклицательного знака.

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

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

If c.HasFormula Then — проверяем только ячейки с формулами.

Три фрагмента кода, обведенные «рамками» — формирование списка адресов ячеек, в которых удалены формулы. Эти пять строк могут быть безболезненно исключены из макроса.

Cells(10, 10) — указать ссылку за пределами используемого диапазона листа или вывести список на отдельный лист.

Но и тут возможен сюрприэ

Маловероятно, но возможно. Для полной безопасности перед удалением формулы ставим еще одну проверку:

Т.е. если в формуле обнаружен фрагмент с именем листа, заменяем его на что-то неестественное для имени, пробуем вычислить формулу. И если ошибки нет, значит, ложная тревога — фрагмент, похожий на ссылку, присутствует только в текстовой строке. Важно именно менять, а не удалять имя (замена на «»): при удалении останется ссылка на ячейки активного листа и IsError=False — формула со ссылкой на другой лист не удалится.

И это еще не все

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

Вернемся к первому примеру с листом кекс:

Наша созданная конструкция честно проверит все три условия: увидит формулу в ячейке; найдет в ней имя листа с восклицательным знаком; проверит, что ошибка есть — и преобразует формулу в результат ее работы!

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

Но это костыль. А правильно: не допускать в работе формул появления ошибок.

Источник

Vba excel разорвать все связи

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

Разрыв связей в маросе делаю так:

200?’200px’:»+(this.scrollHeight+5)+’px’);»> exist_links = ActiveWorkbook.LinkSources(xlExcelLinks)

If Not IsEmpty(exist_links) Then
For i = LBound(exist_links) To UBound(exist_links)
‘ MsgBox exist_links(i)
ActiveWorkbook.BreakLink Name:=exist_links(i), Type:=xlLinkTypeExcelLinks
Next
Else
MsgBox «Связей не найдено»
End If

Все отрабатывает без ошибок, но связь не разрывается

Делаю тоже самое вручную:
1. Копирую лист в новую книгу, пытаюсь через меню разорвать связь. Связь вижу, кнопка разорвать связь активна, но при нажатии связь не разрывается.
2. Удаляю на новом листе все данные и формулы. Связь все равно разорвать не получается.

В чем может быть проблема?

Мне нужно сохранить копию листа без связи с оновной книгой. При этом сделать это нужно МАКРОСОМ!
[moder]Оформляйте коды тегами (кнопка #)[/moder]

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

Разрыв связей в маросе делаю так:

200?’200px’:»+(this.scrollHeight+5)+’px’);»> exist_links = ActiveWorkbook.LinkSources(xlExcelLinks)

If Not IsEmpty(exist_links) Then
For i = LBound(exist_links) To UBound(exist_links)
‘ MsgBox exist_links(i)
ActiveWorkbook.BreakLink Name:=exist_links(i), Type:=xlLinkTypeExcelLinks
Next
Else
MsgBox «Связей не найдено»
End If

Все отрабатывает без ошибок, но связь не разрывается

Делаю тоже самое вручную:
1. Копирую лист в новую книгу, пытаюсь через меню разорвать связь. Связь вижу, кнопка разорвать связь активна, но при нажатии связь не разрывается.
2. Удаляю на новом листе все данные и формулы. Связь все равно разорвать не получается.

В чем может быть проблема?

Мне нужно сохранить копию листа без связи с оновной книгой. При этом сделать это нужно МАКРОСОМ!
[moder]Оформляйте коды тегами (кнопка #)[/moder] Stork4ever

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

Разрыв связей в маросе делаю так:

200?’200px’:»+(this.scrollHeight+5)+’px’);»> exist_links = ActiveWorkbook.LinkSources(xlExcelLinks)

If Not IsEmpty(exist_links) Then
For i = LBound(exist_links) To UBound(exist_links)
‘ MsgBox exist_links(i)
ActiveWorkbook.BreakLink Name:=exist_links(i), Type:=xlLinkTypeExcelLinks
Next
Else
MsgBox «Связей не найдено»
End If

Все отрабатывает без ошибок, но связь не разрывается

Делаю тоже самое вручную:
1. Копирую лист в новую книгу, пытаюсь через меню разорвать связь. Связь вижу, кнопка разорвать связь активна, но при нажатии связь не разрывается.
2. Удаляю на новом листе все данные и формулы. Связь все равно разорвать не получается.

В чем может быть проблема?

Мне нужно сохранить копию листа без связи с оновной книгой. При этом сделать это нужно МАКРОСОМ!
[moder]Оформляйте коды тегами (кнопка #)[/moder] Автор — Stork4ever
Дата добавления — 17.01.2015 в 16:50

Источник

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

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

Что такое связи в Excel

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

  1. [Продажи 2018.xlsx]. Этот фрагмент содержит ссылку на файл, из которого нужно достать информацию. Его также называют источником.
  2. Отчет. Это мы использовали следующее имя, но это не название, которое должно обязательно быть. В этом блоке содержится название листа, в каком надо находить информацию.
  3. $A:$F и $A1 – адрес ячейки или диапазона с данными, которые содержатся в этом документе.

Собственно, процесс создания ссылки на внешний документ и называется связыванием. После того, как мы прописали адрес ячейки, содержащейся в другом файле, изменяется содержимое вкладки «Данные». А именно – становится активной кнопка «Изменить связи», с помощью которой пользователь может отредактировать имеющиеся связи.

Суть проблемы

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

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

Кроме этого, можно отредактировать связи через соответствующую кнопку, расположенную на вкладке «Данные». О том, что связь нарушена, пользователь может также узнать по ошибке #ССЫЛКА, которая появляется тогда, когда эксель не может получить доступ к информации, расположенной по определенному адресу из-за того, что сам адрес недействительный.

Как разорвать связь в Эксель

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

  1. Открываем меню «Данные».
  2. Находим раздел «Подключения», и там – опцию «Изменить связи».
  3. После этого нажимаем на «Разорвать связь».

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

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

Но если количество связей становится слишком большим, вручную их удалять может занять немало времени. Чтобы решить эту проблему за один раз, можно воспользоваться специальным макросом. Он находится в аддоне VBA-Excel. Нужно его активировать и перейти на одноименную вкладку. Там будет находиться раздел «Связи», в котором нам надо нажать на кнопку «Разорвать все связи».

Код на VBA

Если же нет возможности активировать это дополнение, можно создать макрос самостоятельно. Для этого необходимо открыть редактор Visual Basic, нажав на клавиши Alt + F11, и в поле ввода кода записать следующие строки.

Select Case MsgBox(«Все ссылки на другие книги будут удалены из этого файла, а формулы, ссылающиеся на другие книги будут заменены на значения.» & vbCrLf & «Вы уверены, что хотите продолжить?», 36, «Разорвать связь?»)

If Not IsEmpty(WbLinks) Then

For i = 1 To UBound(WbLinks)

ActiveWorkbook.BreakLink Name:=WbLinks(i), Type:=xlLinkTypeExcelLinks

MsgBox «В данном файле отсутствуют ссылки на другие книги.», 64, «Связи с другими книгами»

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

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

  1. Выделить тот набор данных, в котором надо вносить изменения.
  2. Устанавливаем дополнение VBA-Excel, после чего переходим на соответствующую вкладку.
  3. Далее находим меню «Связи» и нажимаем на кнопку «Разорвать связи в выделенных диапазонах».

После этого все связи в выделенном наборе ячеек будут удалены.

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

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

  1. Сначала надо проверить, не содержится ли какая-то информация в именованных диапазонах. Для этого надо нажать на комбинацию клавиш Ctrl + F3 или же открыть вкладку «Формулы» – «Диспетчер имен». Если же имя к файлу указано полное, то нужно просто его отредактировать или же вовсе убрать. Перед тем, как удалять именованные диапазоны, необходимо скопировать файл в какое-то другое место, чтобы можно было вернуться к изначальному варианту, если были совершены неправильные действия.
  2. Если не получается решить проблему с помощью удаления имен, то можно проверить условное форматирование. Ссылка на ячейки в другой таблице может содержаться в правилах условного форматирования. Для этого надо найти соответствующий пункт на вкладке «Главная», а потом нажать на кнопку «Управление файлами».
    Обычно Excel не дает возможности давать адрес других книг в условном форматировании, но это делается, если ссылаться на именованный диапазон с отсылкой на другой файл. Обычно даже после удаления связи ссылка остается. Нет никакой проблемы в том, чтобы убрать такую связь, потому что связь по факту нерабочая. Следовательно, ничего плохого не произойдет, если убрать ее.

Также можно воспользоваться функцией «Проверка данных», чтобы узнать, нет ли ненужных ссылок. Обычно связи остаются, если используется тип проверки данных «Список». Но что же делать, если ячеек много? Неужели необходимо последовательно проверять каждую из них? Конечно, нет. Ведь это займет очень много времени. Поэтому нужно воспользоваться специальным кодом, чтобы значительно сэкономить его.
Option Explicit

‘ Author : The_Prist(Щербаков Дмитрий)

‘ Профессиональная разработка приложений для MS Office любой сложности

‘ Проведение тренингов по MS Excel

‘ WebMoney — R298726502453; Яндекс.Деньги — 41001332272872

‘надо посмотреть в Данные -Изменить связи ссылку на файл-иточник

‘и записать сюда ключевые слова в нижнем регистре(часть имени файла)

‘звездочка просто заменяет любое кол-во символов, чтобы не париться с точным названием

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»

On Error GoTo 0

‘проверяем каждую ячейку на предмет наличия связей

For Each rc In rr

‘на всякий случай пропускаем ошибки — такое тоже может быть

‘но наши связи должны быть без них и они точно отыщутся

On Error Resume Next

On Error GoTo 0

‘нашли — собираем все в отдельный диапазон

If LCase(s) Like sToFndLink Then

If rres Is Nothing Then

Set rres = Union(rc, rres)

‘если связь есть — выделяем все ячейки с такими проверками данных

If Not rres Is Nothing Then

‘ rres.Interior.Color = vbRed ‘если надо выделить еще и цветом

Необходимо в редакторе макросов сделать стандартный модуль, а потом туда вставить этот текст. После этого вызвать окно макросов с помощью комбинации клавиш Alt + F8, а потом выбрать наш макрос и кликнуть по кнопке «Выполнить». При использовании этого кода есть несколько моментов, которые надо учитывать:

  1. Перед тем, как осуществлять поиск связи, которая уже не актуальна, нужно перед этим определить, как выглядит ссылка, через которую она создается. Для этого надо перейти в меню «Данные» и там найти пункт «Изменить связи». После этого надо посмотреть имя файла, и указать его в кавычках. Например, так: Const sToFndLink$ = «*продажи 2018*»
  2. Возможна запись имени не в полном виде, а просто заменить ненужные знаки звездочкой. А в кавычках записывать имя файла обязательно маленькими буквами. В этом случае Эксель найдет все файлы, которые содержат такую строку в конце.
  3. Этот код способен проверять наличие ссылок только в том листе, который сейчас активный.
  4. С помощью этого макроса можно лишь выделить ячейки, которые он обнаружил. Удалять придется все вручную. Это и плюс, потому что можно еще раз все перепроверить.
  5. Также можно сделать так, чтобы ячейки подсвечивались специальным цветом. Для этого нужно убрать знак апострофа перед этой строчкой. rres.Interior.Color = vbRed

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

Источник

 

fordale

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

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

Прошу отеческого совета.  

  В приведенном файле есть ссылки, которые регулярно просят обновиться. Проверив все места известные мне, осталось 2 ссылки, которые я не знаю, как «убить».

 

vikttur

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

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

Не отеческий, детский: не пробовали название темы вставить в окошко поиска (над темой) и нажать кнопулечку?

 

Hugo

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

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

Я их убил в скриптэдиторе в 2003 (Alt+Shift+F11).  
Правда не уверен, что полностью корректно…

 

fordale

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

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

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

 

fordale

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

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

с 2003 туго теперь, есть только 2010…

 
 

Hugo

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

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

Z — так получилось удалить? У меня не получилось. И макрос тоже не помог.  
Кстати — а где в 2007/10 ScriptEditor засунули (или удалили совсем?)?

 

fordale

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

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

{quote}{login=Z}{date=14.02.2012 11:49}{thema=}{post}Вариант?!. ;) -58036-{/post}{/quote}  

  =))

 

Hugo

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

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

А Вы не пробовали пересохранить файл в другом формате — xlsb например, или xlsm, xlsx(без макросов!), и затем снова попробовать удалить связи стандартным способом?  
Раз уж 2010 версия есть.

 

Увы, однако, — барабашка какой-то не дает… :( А прочее, как вариант — Настройки — отображать «Разработчика» на ленте, а там… рукой подать — скрин. -62672-

 

fordale

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

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

да, к сожалению, из простых перебрал все варианты.  

  Чувствую, что где-то сидит еще какая-то надстройка, которая и держит связь, но я просто не знаю, что это

 

fordale

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

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

{quote}{login=Z}{date=14.02.2012 12:45}{thema=}{post}Увы, однако, — барабашка какой-то не дает… :( А прочее, как вариант — Настройки — отображать «Разработчика» на ленте, а там… рукой подать — скрин. -62672-{/post}{/quote}  

  Z, мне стыдно, но я не уловил намека (

 

Hugo

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

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

Это редактор VBA, это знакомо :)  
А где ScriptEditor?  

  По теме — порыться в архиве вероятно нужно, там есть папка    
post_307928b.xlsb.zipxlexternalLinks

 

GIG_ant

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

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

Возможно вопрос уже решен, но все же:  
Я встретился недавно с такой же проблемой, и вот что оказалось: связи нельзя удалить стандартным методом если в книге присутствуют имена с формулами (которые и создают эти связи). Выход: удалить ненужные имена из диспечера имен. Связи тогда сами удалятся. В файле примере выполнив в окне Immediate вот такой код:  
For Each n In ThisWorkbook.Names: n.Visible = True: Next  
и зайдя в диспечер имен, открывается вот какая картина (см скрин). Если удалить все ненужные имена, то связи исчезнут сами собой.

 

{quote}{login=GIG_ant}{date=14.02.2012 01:20}{thema=}{post}Возможно вопрос уже решен, но все же…{/post}{/quote}  
Спасибо, дотошный GIG_ant!.. Однако, кое-кто желает знать — «А где ScriptEditor?»… ;)

 

Hugo

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

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

Да, как всё просто оказалось :)  

  Но всёж — где он?  
И кстати я уже второй раз эту тему поднимаю — и ответа как нет, так нет…  
Убрали или спрятали?  

  Сам пошёл искать…  

http://p2p.wrox.com/vbscript/69552-script-editor-ms-office-2007-a.html

 

fordale

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

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

С именами я разобрался изначально, но почему-то ссылки остались, и поэтому я выложил фаил  

  может быть это глюк, но стоит скопировать этот лист в другой фаил и его тоже поражает эта зараза

 

fordale

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

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

{quote}{login=Hugo}{date=14.02.2012 12:56}{thema=}{post}Это редактор VBA, это знакомо :)  
А где ScriptEditor?  

  По теме — порыться в архиве вероятно нужно, там есть папка    
post_307928b.xlsb.zipxlexternalLinks{/post}{/quote}  

  Редактор VBA знакомо :), но я не понял, что там нужно сделать чтобы убрать эти ссылки

 

GIG_ant

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

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

{quote}{login=Fordale}{date=14.02.2012 02:00}{thema=}{post}С именами я разобрался изначально, но почему-то ссылки остались, и поэтому я выложил фаил  

  может быть это глюк, но стоит скопировать этот лист в другой фаил и его тоже поражает эта зараза{/post}{/quote}  

  у меня удалились.

 

Hugo

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

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

С именами разобрались не до конца — там их ещё 56 штук (если правильно помню) осталось.

 

В книге были скрытые имена с внешними ссылками.  
Я создал новую книгу и скопировал содержимое листа + код VBA  
Имена были уничтожены при копировании, т.к. в книге нет ячеек со ссылками на эти имена  
Связей больше нет

 

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

  Всем спасибо

 

{quote}{login=}{date=14.02.2012 03:49}{thema=}{post}… удаление имен в моем файле не дает желаемого эффекта в моем случае (либо руки кривые)… {/post}{/quote}  
Может мастера на дом вызвать, или сами по рецепту GIG_ant’a:  
«В файле примере выполнив в окне Immediate вот такой код:  
For Each n In ThisWorkbook.Names: n.Visible = True: Next  
и зайдя в диспечер имен, открывается вот какая картина (см скрин). Если удалить все ненужные имена, то связи исчезнут сами собой.»  
ps На post_307965.xls, например, получилось.

 

Hugo

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

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

Можно на корню всё под нож:  

  For Each n In ThisWorkbook.Names: n.Delete: Next  

  Но так конечно можно и что-то нужное отрезать…

 

GIG_ant

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

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

 

GIG_ant

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

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

Странно не выскочила ), там просто имя было типа _xlfn.IFERROR, так вот раньше его макросом не удаляло !

 

{quote}{login=}{date=14.02.2012 03:49}{thema=}{post}удаление имен в моем файле{/post}{/quote}  

  post 308050.xls — это Ваш Файл С УДАЛЕННЫМИ ССЫЛКАМИ. НИЧЕГО ДЕЛАТЬ УЖЕ НЕ НАДО — просто возьмите его

 

1 —  кричать не надо, 2 — рыба и рыбораздача — дело хорошее, но 3 — требуется, имхо,  универсальная удочка на разную (обрисованную ранее) «рыбу»… ;) -56241-

 

Уважаемый Z, ивините, бога ради, теперь буду знать, что ЭТО называется криком.  
Спасибо за науку, мне не свойственна несдержанность  
По делу: В том посте ведь не только книга-результат, но и достаточно интересный способ решения задачи в общем виде. Первое, что я сделал для удаления сбойных связей — воспользовался утилитой Билла Менвилла, но она не сработала. Тогда я решил воспользовался эффективным, но малоизвестным способом удаления не используемых имен (ни VBA, ни скрипт не нужен, вся процедура заняла не более 1 минуты, есть результат). Смысл этих действий такой: при копировании содержимого листа в новую книгу там автоматически создаются только те имена, на которые есть ссылки в любых объектах листа (ячейках, формулах проверок, условном форматировании, графических объектах и т.д.). Не используемые имена автоматечески удаляются. А заодно удаляется много чего другого лишнего. Этот  приём описан на многих сайтах, есть он в книге Уокенбаха, соответствующий очень красивый макрос предложил KuklP на ExcelWorld. Мне кажется, что такой ход имеет более широкое применение, чем простое удаление объектов-имен в VBA

 

Z

Гость

#30

14.02.2012 20:43:35

{quote}{login=v__step}{date=14.02.2012 08:34}{thema=}{post}… По делу:…{/post}{/quote}  
Спасибо, v__step! Вот теперь, имхо, для меня кое-какие ваши «рыболовецкие» снасти прояснились… ;) -81049-

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

Содержание

  1. Что такое связи в Excel
  2. Суть проблемы
  3. Как разорвать связь в Эксель
  4. Как разорвать связь со всеми книгами
  5. Код на VBA
  6. Как разорвать связи только в выделенном диапазоне
  7. Что делать, если связи не разрываются

Что такое связи в Excel

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

  1. [Продажи 2018.xlsx]. Этот фрагмент содержит ссылку на файл, из которого нужно достать информацию. Его также называют источником.
  2. Отчет. Это мы использовали следующее имя, но это не название, которое должно обязательно быть. В этом блоке содержится название листа, в каком надо находить информацию.
  3. $A:$F и $A1 – адрес ячейки или диапазона с данными, которые содержатся в этом документе.

Собственно, процесс создания ссылки на внешний документ и называется связыванием. После того, как мы прописали адрес ячейки, содержащейся в другом файле, изменяется содержимое вкладки «Данные». А именно – становится активной кнопка «Изменить связи», с помощью которой пользователь может отредактировать имеющиеся связи.

Суть проблемы

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

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

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

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

Кроме этого, можно отредактировать связи через соответствующую кнопку, расположенную на вкладке «Данные». О том, что связь нарушена, пользователь может также узнать по ошибке #ССЫЛКА, которая появляется тогда, когда эксель не может получить доступ к информации, расположенной по определенному адресу из-за того, что сам адрес недействительный.

Как разорвать связь в Эксель

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

  1. Открываем меню «Данные».
  2. Находим раздел «Подключения», и там – опцию «Изменить связи».
  3. После этого нажимаем на «Разорвать связь».

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

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

Но если количество связей становится слишком большим, вручную их удалять может занять немало времени. Чтобы решить эту проблему за один раз, можно воспользоваться специальным макросом. Он находится в аддоне VBA-Excel. Нужно его активировать и перейти на одноименную вкладку. Там будет находиться раздел «Связи», в котором нам надо нажать на кнопку «Разорвать все связи».

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

Код на VBA

Если же нет возможности активировать это дополнение, можно создать макрос самостоятельно. Для этого необходимо открыть редактор Visual Basic, нажав на клавиши Alt + F11, и в поле ввода кода записать следующие строки.

Sub UnlinkWorkBooks()

    Dim WbLinks

    Dim i As Long

    Select Case MsgBox(«Все ссылки на другие книги будут удалены из этого файла, а формулы, ссылающиеся на другие книги будут заменены на значения.» & vbCrLf & «Вы уверены, что хотите продолжить?», 36, «Разорвать связь?»)

    Case 7 ‘ Нет

        Exit Sub

    End Select

    WbLinks = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)

    If Not IsEmpty(WbLinks) Then

        For i = 1 To UBound(WbLinks)

            ActiveWorkbook.BreakLink Name:=WbLinks(i), Type:=xlLinkTypeExcelLinks

        Next

    Else

        MsgBox «В данном файле отсутствуют ссылки на другие книги.», 64, «Связи с другими книгами»

    End If

End Sub

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

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

  1. Выделить тот набор данных, в котором надо вносить изменения.
  2. Устанавливаем дополнение VBA-Excel, после чего переходим на соответствующую вкладку.
  3. Далее находим меню «Связи» и нажимаем на кнопку «Разорвать связи в выделенных диапазонах».

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

После этого все связи в выделенном наборе ячеек будут удалены.

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

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

  1. Сначала надо проверить, не содержится ли какая-то информация в именованных диапазонах. Для этого надо нажать на комбинацию клавиш Ctrl + F3 или же открыть вкладку «Формулы» – «Диспетчер имен». Если же имя к файлу указано полное, то нужно просто его отредактировать или же вовсе убрать. Перед тем, как удалять именованные диапазоны, необходимо скопировать файл в какое-то другое место, чтобы можно было вернуться к изначальному варианту, если были совершены неправильные действия.
  2. Если не получается решить проблему с помощью удаления имен, то можно проверить условное форматирование. Ссылка на ячейки в другой таблице может содержаться в правилах условного форматирования. Для этого надо найти соответствующий пункт на вкладке «Главная», а потом нажать на кнопку «Управление файлами». Как в Excel разорвать связи
    Обычно 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

Необходимо в редакторе макросов сделать стандартный модуль, а потом туда вставить этот текст. После этого вызвать окно макросов с помощью комбинации клавиш Alt + F8, а потом выбрать наш макрос и кликнуть по кнопке «Выполнить». При использовании этого кода есть несколько моментов, которые надо учитывать:

  1. Перед тем, как осуществлять поиск связи, которая уже не актуальна, нужно перед этим определить, как выглядит ссылка, через которую она создается. Для этого надо перейти в меню «Данные» и там найти пункт «Изменить связи». После этого надо посмотреть имя файла, и указать его в кавычках. Например, так: Const sToFndLink$ = «*продажи 2018*»
  2. Возможна запись имени не в полном виде, а просто заменить ненужные знаки звездочкой. А в кавычках записывать имя файла обязательно маленькими буквами. В этом случае Эксель найдет все файлы, которые содержат такую строку в конце.
  3. Этот код способен проверять наличие ссылок только в том листе, который сейчас активный.
  4. С помощью этого макроса можно лишь выделить ячейки, которые он обнаружил. Удалять придется все вручную. Это и плюс, потому что можно еще раз все перепроверить.
  5. Также можно сделать так, чтобы ячейки подсвечивались специальным цветом. Для этого нужно убрать знак апострофа перед этой строчкой. rres.Interior.Color = vbRed

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

  1. Создаем резервную копию документа.
  2. Открываем этот документ с помощью архиватора. Можно воспользоваться любым, который поддерживает ZIP формат, но также подойдет и WinRar, а также встроенный в Windows.
  3. В появившемся архиве необходимо найти папку xl, а там открыть externalLinks.
  4. В этой папке находятся все внешние связи, каждая из которых соответствует файлу вида externalLink1.xml. Все они лишь пронумерованы, и поэтому пользователь не имеет возможности понять, какая именно эта связь. Чтобы понять, какая именно связь, надо открыть папку _rels, и там посмотреть его.
  5. После этого убираем все или конкретные связи, исходя из того, что мы узнаем в файле externalLinkX.xml.rels.
  6. После этого открываем наш файл средствами Excel. Там будет информация об ошибке типа «Ошибка в части содержимого в Книге». Даем согласие. После этого появится еще один диалог. Закрываем его.

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

Оцените качество статьи. Нам важно ваше мнение:

Понравилась статья? Поделить с друзьями:
  • Excel vba как удалить диапазон строк
  • Excel vba как сравнить ячейки
  • Excel vba как сравнить диапазоны
  • Excel vba как создать форму ввода
  • Excel vba как создать новую книгу с именем