Профессиональные приемы работы в Microsoft Excel

Обмен опытом => Microsoft Excel => Тема начата: Shadowmaker от 09.08.2019, 14:00

Название: Поиск мёртвых связей с другими листами
Отправлено: Shadowmaker от 09.08.2019, 14:00
Добрый день!

Столкнулся с такой проблемой...
После ряда вычислений и сравнений в файле остались ссылки на другие файлы экселя с данными. Финальный файл переместился в другое место - и понятное дело, ссылки на другие файлы умерли... теперь при каждом открытии файла эксель ругается что в файле невозможно обновить связи... бла бла бла... Как теперь мне эти ячейки с формулами где я использовал ранее ссылки на другие книги эселя найти? В идеале хорошо бы там просто зафиксировать цифры как есть - без обновления, а связи вообще удалить... не могу понять как это сделать - особенно в ситуации когда таких формул со ссылками в другие книги может быть больше миллиона
Название: Re: Поиск мёртвых связей с другими листами
Отправлено: boa от 09.08.2019, 14:09
Добрый день,
Данные - Редактировать ссылки - разорвать ссылки
как-то так
Название: Re: Поиск мёртвых связей с другими листами
Отправлено: Shadowmaker от 09.08.2019, 14:23
Забыл уточнить... про этот способ я знаю... но вот по какой-то причине у меня эта кнопка не активна - она просто серая - как буд-то связей нет.
Осложняется всё тем, что предоставить файл для разборки на форуме не могу - мало того что он посто огромный, так там ещё и слишком уж много разной инфы, которую не хочется светить.
Название: Re: Поиск мёртвых связей с другими листами
Отправлено: boa от 09.08.2019, 14:28
а вот так можно программно избавиться от ссылок и рефов в менеджере имен (Ctrl+F3)
Option Explicit

Public Sub Names_Delete_Links()
' Макрос записан 02.07.2019 (boa)
'   удалить имена в книге с ссылками на другие книги
    On Error Resume Next
    Dim objName As Object, iCount&, sMsg$
    For Each objName In ActiveWorkbook.Names
        If InStr(objName.RefersTo, "]") Then
'Debug.Print objName.Name; objName.RefersTo
            objName.Delete: iCount = iCount + 1
        End If
    Next objName
    If iCount > 0 Then sMsg = "Удалено " & iCount & " имен с ссылками на другие книги." Else sMsg = "Не найдены имена для удаления"
    MsgBox sMsg, vbInformation, ""
End Sub

Public Sub Names_Delete_REF_Links()
' Макрос записан 02.07.2019 (boa)
'   удалить имена в книге с битыми ссылками
    On Error Resume Next
    Dim objName As Object, iCount&, sMsg$
    For Each objName In ActiveWorkbook.Names
        If InStr(objName.RefersTo, "#REF!") Then
'Debug.Print objName.Name; objName.RefersTo
            objName.Delete: iCount = iCount + 1
        End If
    Next objName
    If iCount > 0 Then sMsg = "Удалено " & iCount & " имен с ""битыми"" ссылками." Else sMsg = "Не найдены имена для удаления"
    MsgBox sMsg, vbInformation, ""
End Sub

Название: Re: Поиск мёртвых связей с другими листами
Отправлено: _Boroda_ от 09.08.2019, 16:49
Еще проверьте _сводные_ (https://msexcel.ru/content/view/34/2/) таблицы (если есть). Они могут ссылаться на другие книги, но в Данные - Связи это не прописывается
Название: Re: Поиск мёртвых связей с другими листами
Отправлено: Shadowmaker от 09.08.2019, 17:07
Цитата: _Boroda_ от 09.08.2019, 16:49
Еще проверьте _сводные_ (http://msexcel.ru/content/view/34/2/) таблицы (если есть). Они могут ссылаться на другие книги, но в Данные - Связи это не прописывается

ДА! Нашёл! Спасибо - действительно, в сводных они и были... совсем зыбл про них.