Удаление связей в MS Excel
Причин для удаления может быть несколько: файл отправлен по почте, перемещён на другой компьютер, подгружен в какую-либо систему и т.д.

1 способ
Самый простой способ – это разорвать связь. Вкладка «Данные» — «Изменить связи». В открывшемся окне разорвать ненужные связи

Этот способ работает не всегда и иногда связи остаются
2 способ
Следует проверить «Диспетчер имен» и убрать там лишние записи. Открыть его можно используя горячие клавиши Ctrl+F3

3 способ
Когда имён нет, но проблема остаётся. На вкладке «Главная» — «Условное форматирование» выбираем пункт «Управление правилами»


Может получиться, что правил очень много и просмотреть их все проблематично. К тому же не факт, что найдём, что ищем
4 способ
Можно проверить ячейки, содержащие разные правила
«Найти и выделить» — «Выделить группу ячеек» — в открывшемся окне отметить «Проверка данных»


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

Находим подсвеченные ячейки и проверяем их корректность

Жмём выделенную «сомнительную» ячейку и открываем проверку данных

В моём случае там какая-то левая ссылка

Удаляем содержимое
Ставим тип «Любое значение»
Снова пробуем удалить связь

Рабочий способ, но если и это не прокатило, то идём дальше
5 способ
На разных форумах пользователи делятся своими методами решения проблемы и приводят примеры макросов. Сначала включаем возможности разработчиков
«Параметры» – «лента» — включаем вкладку «Разработчик»

Теперь можем писать макросы

1 вариант
1 2 3 4 5 6 7 8 9 |
Sub УдалитьСсылки() Dim iLink On Error Resume Next For Each iLink In ActiveWorkbook.LinkSources(xlExcelLinks) ActiveWorkbook.BreakLink iLink, xlExcelLinks Next On Error GoTo 0 End Sub |
2 вариант
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 |
Sub CopyWithoutRef() 'Dim tm!: tm = Timer Dim r As Range, s As String, nm As Name With Application .ScreenUpdating = 0: .Calculation = xlCalculationManual End With ActiveSheet.Copy After:=ActiveSheet With ActiveSheet For Each r In .UsedRange.SpecialCells(xlCellTypeFormulas).Cells s = r.Formula If InStr(1, s, "!", vbTextCompare) Then r.Value = r.Value Else For Each nm In ThisWorkbook.Names If InStr(1, s, nm.Name, vbTextCompare) Then r.Value = r.Value: Exit For Next nm End If Next r End With With Application .ScreenUpdating = 1: .Calculation = xlCalculationAutomatic End With 'MsgBox Timer - tm End Sub |
3 вариант
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub www() Dim c As Range, f$ On Error Resume Next With ActiveSheet.UsedRange Set c = .Find(What:="!", LookIn:=xlFormulas, _ LookAt:=xlPart, MatchCase:=False, SearchFormat:=False) If Not c Is Nothing Then f = c.Address Do c.Value = c.Value Set c = .FindNext© Loop While Not c Is Nothing And c.Address <> f End If End With End Sub |
У меня не отработал ни один макрос
6 способ
Ещё вариант – вскрыть файл при помощи архиватора и удалить ссылки вручную


Удаляем всё содержимое
Если при этом связи остались, то можно открыть в архиваторе не оригинальный вариант, а пересохранённый в xlsb

Сохраняем документ как «двоичная книга». (тип файла: xlsb)
Открываем файл архиватором — удаляем папку xl / externalLinks
Закрываем, открываем, на все вопросы отвечаем утвердительно

Пересохраняем в обычный формат и проверяем

Комментарии закрыты