Страницы: 1
RSS
Выделение связанных ячеек, Как выделить в документе все связанные ячейки
 
Здравствуйте!
Есть документ который связан с несколькими другими документами и подтягивает из них данные. При попытке открытия документа который перемещен, соответственно появляется запрос на обновление данных,  сам запрос разорвать/изменить проблем нет. (меню файл- изменение связей). Вопрос как в документе подсветить/выделить/ и т.д. те ячейки в которых есть эти ссылки на сторонние документы? Через "найти и выделить" слишком много ссылок заливает или одну показывает, а вот как нибудь их все возможно выделить?  В примере показал выделение нужных ячеек для одной из связей. Спасибо
 
Вариант:
Код
Sub MacroFind()
Dim FindRng As Range, TxtFind As String, FirstAdr As String, RngDel As Range, StrokaAdr As String
    TxtFind = "D:\*"
    Set FindRng = Range("B1:Q20").Cells.Find(What:=TxtFind, LookIn:=xlFormulas, LookAt:=xlPart)
    If Not FindRng Is Nothing Then
        FirstAdr = FindRng.Address
        Do
            If StrokaAdr = "" Then
                StrokaAdr = FindRng.Address
            Else
                StrokaAdr = StrokaAdr & "," & FindRng.Address
            End If
            Set FindRng = Cells.FindNext(FindRng)
        Loop While FindRng.Address <> FirstAdr
    Else
        MsgBox "Значение [" & TxtFind & "] не найдено!", 48, "Ошибка"
        Exit Sub
    End If
    Range(StrokaAdr).Select
End Sub

 
Я прошу прощения, но у меня почему-то отображает в таком виде:
Цитата
Else        MsgBox "Çíà÷åíèå [" & TxtFind & "] íå íàéäåíî!", 48, "Îøèáêà"
       Exit Sub
Я вставил код в Object (General) текущего листа, но при попытке выполнения макроса пишет:
 
 
Мне не видно, куда Вы поместили код )) Смотрите на примере Вашего файла.
 
Все равно выдает ошибку, правда уже по русски
где я туплю и не то делаю?
 
Файл, который я прикрепил, у меня работает без ошибки: нажимаю кнопку - выделяются все ячейки, в которых есть упоминание про диск D:
 
Юрий М, у меня тоже выдает ошибку
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Странно... См. фотофакт )
 
Цитата
Bema написал:
у меня тоже выдает ошибку
Скачаный файл сохранить на диск D не пробовали? Или букву диска в коде на С поменять?
 
А может быть ошибка из-за адреса, местонахождения документа? у меня он такой-
C:\Users\555.NOUT\YandexDisk\Поделиться\Планирование
А диска D у меня нет вообще...
 
RAN, помогло.
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Юрий М; RAN Спасибо, поменял на С действительно заработало, но полвопроса осталось: у меня в файле несколько ссылок, и если взять оригинальный файл и запустить макрос на нем то пол листа выделяется, а возможно типа фильтра сделать что-то, или выделение по запросу или из списка связей?
 
Цитата
edkudin написал:
возможно типа фильтра сделать что-то, или выделение по запросу или из списка связей?
Возможно.
 
Цитата
edkudin написал: а возможно типа фильтра сделать что-то
OFF Стоит ли такая игра свеч?! В чем главная идея, ее ЦЕЛЕСООБРАЗНОСТЬ - и тогда можно, наверное, дальше ломать голову... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Вопрос возник после того, как пришлось "файлик" 1500х12000 столбиков/строк "вручную шерстить" искать 2 битых связи
 
1500(!) столбцов - КАК Вы с таким файлом работаете? ))
 
Я не работаю, я мучаюсь
А файлы такие минобороны рожает с страшных муках...

А так как на одни и те-же грабли они очень любят наступать и такие файлы с битыми ссылками опять будут, то и хотелось бы иметь что-нибудь для облегчения...
 
Вариант: в какой-нибудь свободной ячейке создайте выпадающий список, в который поместите набор значений для поиска. А в коде переменной TxtFind присваивайте значение, выбранное из этого списка.
 
Другой вариант: запрашивать у пользователя значение для поиска. Смотрите в сторону InputBox.
 
Спасибо большое за наводку!
Буду кумекать!
 
См.  также метод Workbook.LinkSources с параметром xlExcelLink
Владимир
 
Здравствуйте!
Юрий М
Я начал эксперимент со ссылками,
1. в свободные ячейки я записал пути\связи
2. сделал выпадающий список
3. назначил переменную (Find_SSS) пути выбираемому с ячейку списком
и столкнулся со следующим:
Если я копирую ссылку в Ваш макрос, то всё работает как надо, подсвечиваются только нужные ячейки, всё отлично!
Но если я вставляю в макрос переменную, то происходит следующее- лист зависает на неопределенное время, стрелка мышки при этом принимает форму голубого вращающегося кольца, а сама Ваша кнопка всё это время находится в «нажатом состоянии»
Помогает только аварийное закрытие книги.
Что нужно сделать? Или что я не так делаю?
 
Вот сейчас, после 1,5 часов "висения" выскочило сообщение, после дебага
подсветилась-  Range(StrokaAdr).Select
 
sokol92
пошарил я по вашей подсказке, нашел подобное но адаптировать не смог, останавливается на цветной строке
в оригинале там был Debug.Print а вот как правильно сделать? и можно ли результат работы макроса в "ячейку скинуть"?
Код
Public Sub LinkDocs()
   'Установление связей рабочей книги
   Dim BookLinks As Variant
   Dim i As Integer
   With ThisWorkbook
      ' связи с другими книгами Excel.
      BookLinks = .LinkSources(xlExcelLinks)
      If Not IsEmpty(BookLinks) Then
         MsgBox "Существуют ссылки на рабочие книги Excel!", 26, "Ссылки"
         For i = LBound(BookLinks) To UBound(BookLinks)
            [COLOR=#0000FF]MsgBox "Ссылка" & i & " : ", BookLinks(i), 48, "Ссылки"[/COLOR]
                If BookLinks(i) = "BookTwo" Then
               .OpenLinks BookLinks(i)
               .ChangeLink BookLinks(i), "BookOne"
            End If
         Next i
      Else: MsgBox "Ссылки на рабочие книги отсутствуют!", 48, "Ошибка"
      End If
   End With
End Sub
Изменено: edkudin - 04.12.2017 20:49:10
 
Следующая процедура занесет в ячейки, начиная с J22, внешние ссылки (если они есть):

Код
Public Sub LinkDocs()
'Установление связей рабочей книги
    Dim BookLinks, i As Long
    BookLinks = ThisWorkbook.LinkSources(xlExcelLinks)
    If Not IsEmpty(BookLinks) Then
        For i = LBound(BookLinks) To UBound(BookLinks)
            Range("J" & (21 + i)) = BookLinks(i)  ' адрес ячейки менять здесь
        Next i
    Else: MsgBox "Ссылки на рабочие книги отсутствуют!"
    End If
End Sub

P.S. Оформите, пожалуйста, текст в виде кода в предыдущем сообщении
Владимир
 
Цитата
edkudin написал:
Помогает только аварийное закрытие книги.
Цикл Do...Loop содержит в себе грабли, в виде невозможности остановить код в случае возникновения ошибки.
После пары наступлений на эти грабли, стал всегда добавлять в код DoEvents.
Раскраска
Код
Sub Мяу()
    Dim aLinks, txt$, FirstAdr$, StrokaAdr$, FindRng As Range, aft As Range, i&
    aLinks = ActiveWorkbook.LinkSources(xlExcelLinks)
    If Not IsEmpty(aLinks) Then
        Set aft = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell)
        For i = 1 To UBound(aLinks)
            If Dir(aLinks(i)) = "" Then
                txt = Left$(aLinks(i), InStrRev(aLinks(i), "\")) & "[" & Mid$(aLinks(i), InStrRev(aLinks(i), "\") + 1)
                Set FindRng = ActiveSheet.UsedRange.Cells.Find(What:=txt, After:=aft, LookIn:=xlFormulas, LookAt:=xlPart)
                If Not FindRng Is Nothing Then
                    FirstAdr = FindRng.Address(0, 0)
                    Do
                        If StrokaAdr = "" Then
                            StrokaAdr = FindRng.Address(0, 0)
                        Else
                            If Len(StrokaAdr) > 230 Then
                                Range(StrokaAdr).Interior.ColorIndex = i + 2
                                StrokaAdr = FindRng.Address(0, 0)
                            Else
                                StrokaAdr = StrokaAdr & "," & FindRng.Address(0, 0)
                            End If
                        End If
                        Set FindRng = Cells.FindNext(FindRng)
                        DoEvents
                    Loop While FindRng.Address(0, 0) <> FirstAdr
                End If
                Range(StrokaAdr).Interior.ColorIndex = i + 2
            End If
        Next i
    End If
End Sub
 
Вот с переменной (выпадающий список в ячейке R1) и с небольшими правками кода - неправильно указывал диапазон (.Cells).
 
Всем огромное спасибо!
кое в чем удалось разобраться, объединил макрос Юрия М и sokol92 все работает... почти всё...
как всегда есть ложка дегтя, не могу разобраться почему через переменную такая ссылка работает C:\123\[Исходные данные 2018.xlsx] а такая (без квадратных скобок) нет C:\123\Исходные данные 2018.xlsx,  вставленные вручную ссылки и та и та работают.
Сейчас пытаюсь вставить квадратные скобки... закрывающую то не проблема, а вот открывающую я так думаю по поиску "\" с "конца выражения" и вставкой после него символа (&[ )

Или это слишком? Может есть еще более простой вариант?
 
См. макрос в сообщении #26 (он раскрасит "плохие" ячейки). Я бы после строки номер 8 упомянутого кода добавил бы строку

Код
txt = Replace(txt, "~", "~~")


поскольку зарезервированный для поиска в Excel символ "~" может встретиться в возвращаемых методом LinkSources значениях.
Владимир
 
Всем огромнейшее спасибо!
Благодаря подсказке sokol92 разобрался со всем!
Ваши макросы разместил на "оригинальном файле", в итоге красота!!!
Теперь могу сразу битые ссылки "вычленить" (спасибо RAN )
по выпадающему списку выбрать и подсветить все ячейки относящиеся к конкретной ссылке (спасибо Юрий М )
и вообще всё удалось связать и заставить работать (самое большое спасибо sokol92 )
немного жаль, что на этом форуме нельзя карму подымать как на других форумах, с огромным удовольствием бы это сделал!
Страницы: 1
Читают тему
Наверх