Версия для слабовидящих
Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

 

= Мир MS Excel/Как разорвать связи макросом? - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Как разорвать связи макросом?
Stork4ever Дата: Суббота, 17.01.2015, 16:50 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

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

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

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. Удаляю на новом листе все данные и формулы. Связь все равно разорвать не получается!!!

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

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


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

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

[vba]
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
[/vba]

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

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

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

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

Автор - Stork4ever
Дата добавления - 17.01.2015 в 16:50
gling Дата: Суббота, 17.01.2015, 17:12 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2643
Репутация: 739 ±
Замечаний: 0% ±

2010
Возможно в книге есть именованные диапазоны. Для полного разрыва связей их тоже нужно удалить.


ЯД-41001506838083
 
Ответить
СообщениеВозможно в книге есть именованные диапазоны. Для полного разрыва связей их тоже нужно удалить.

Автор - gling
Дата добавления - 17.01.2015 в 17:12
Stork4ever Дата: Суббота, 17.01.2015, 17:52 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Возможно в книге есть именованные диапазоны. Для полного разрыва связей их тоже нужно удалить.


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


Возможно ли принудительно сохранить те значения, которые рассчитаны на данный момент? Искать формулы по всему листу довольно проблематично!

Автор - Stork4ever
Дата добавления - 17.01.2015 в 17:52
TimSha Дата: Суббота, 17.01.2015, 17:55 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 627
Репутация: 94 ±
Замечаний: 0% ±

Excel 2013 Pro +
Искать формулы по всему листу довольно проблематично!

Очень просто. Пробовали открыть - "Найти и выделить" - далее - "Формулы"... ;)


"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Ответить
Сообщение
Искать формулы по всему листу довольно проблематично!

Очень просто. Пробовали открыть - "Найти и выделить" - далее - "Формулы"... ;)

Автор - TimSha
Дата добавления - 17.01.2015 в 17:55
Stork4ever Дата: Суббота, 17.01.2015, 18:04 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Очень просто. Пробовали открыть - "Найти и выделить" - далее - "Формулы"...


Развернуть формулы и искать ссылки? Данных слишком много :( Или я что-то не так понял?
 
Ответить
Сообщение
Очень просто. Пробовали открыть - "Найти и выделить" - далее - "Формулы"...


Развернуть формулы и искать ссылки? Данных слишком много :( Или я что-то не так понял?

Автор - Stork4ever
Дата добавления - 17.01.2015 в 18:04
RAN Дата: Суббота, 17.01.2015, 18:12 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010

Activesheet.Usedrange.Value=Activesheet.Usedrange.Value



Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Activesheet.Usedrange.Value=Activesheet.Usedrange.Value
[/vba]

Автор - RAN
Дата добавления - 17.01.2015 в 18:12
Stork4ever Дата: Суббота, 17.01.2015, 18:18 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Еще раз уточним...

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

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



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

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

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


Сообщение отредактировал Stork4ever - Суббота, 17.01.2015, 18:31
 
Ответить
СообщениеЕще раз уточним...

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

[vba]
Range("J11:J400").Select Selection.Copy Range("J11:J400").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=False
[/vba]

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

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

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

Автор - Stork4ever
Дата добавления - 17.01.2015 в 18:18
RAN Дата: Суббота, 17.01.2015, 18:40 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Но связь с книгой не могу порвать, пока не сохраню и не закрою все книги.

Ну и что? Чем эта связь мешает?

xlPasteValues


вставляет значения.
А то, что именованые диапазоны зацепились за старую книгу, при осутствии ссылок на них, никак ни на что не влияет.
И пусть их болтаются до закрытия.
Или

Workbooks("A").Sheets("aaa").Range("A1:A10") = Workbooks("B").Sheets("aaa").Range("A1:A10")



Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Суббота, 17.01.2015, 18:43
 
Ответить
Сообщение
Но связь с книгой не могу порвать, пока не сохраню и не закрою все книги.

Ну и что? Чем эта связь мешает?
[vba]
xlPasteValues
[/vba]
вставляет значения.
А то, что именованые диапазоны зацепились за старую книгу, при осутствии ссылок на них, никак ни на что не влияет.
И пусть их болтаются до закрытия.
Или
[vba]
Workbooks("A").Sheets("aaa").Range("A1:A10") = Workbooks("B").Sheets("aaa").Range("A1:A10")
[/vba]

Автор - RAN
Дата добавления - 17.01.2015 в 18:40
Stork4ever Дата: Суббота, 17.01.2015, 19:15 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Спасибо!
 
Ответить
СообщениеСпасибо!

Автор - Stork4ever
Дата добавления - 17.01.2015 в 19:15
gling Дата: Суббота, 17.01.2015, 20:15 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2643
Репутация: 739 ±
Замечаний: 0% ±

2010
Использовал такой макрос при создании новой книги из листов. Посмотрите может пригодится.

Sub Связи() 'разорвать все связи
    Dim WorkbookLinks As Variant
    Dim Wb As Workbook
    Dim n As Variant
    Dim i As Long
        For Each n In ActiveWorkbook.Names:
        On Error Resume Next
            n.Delete:
        Next

        Set Wb = ActiveWorkbook
        WorkbookLinks = Wb.LinkSources(Type:=xlLinkTypeExcelLinks)
        If IsArray(WorkbookLinks) Then
            For i = LBound(WorkbookLinks) To UBound(WorkbookLinks)
                Wb.BreakLink _
                        Name:=WorkbookLinks(i), _
                        Type:=xlLinkTypeExcelLinks
            Next i
        Else
        End If
End Sub



ЯД-41001506838083
 
Ответить
СообщениеИспользовал такой макрос при создании новой книги из листов. Посмотрите может пригодится.[vba]
Sub Связи() 'разорвать все связи      Dim WorkbookLinks As Variant      Dim Wb As Workbook      Dim n As Variant      Dim i As Long          For Each n In ActiveWorkbook.Names:          On Error Resume Next              n.Delete:          Next          Set Wb = ActiveWorkbook          WorkbookLinks = Wb.LinkSources(Type:=xlLinkTypeExcelLinks)          If IsArray(WorkbookLinks) Then              For i = LBound(WorkbookLinks) To UBound(WorkbookLinks)                  Wb.BreakLink _                          Name:=WorkbookLinks(i), _                          Type:=xlLinkTypeExcelLinks              Next i          Else          End If End Sub
[/vba]

Автор - gling
Дата добавления - 17.01.2015 в 20:15
VictorM Дата: Вторник, 01.08.2017, 19:34 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 161
Репутация: 27 ±
Замечаний: 0% ±

gling, спасибо. То что нужно!
 
Ответить
Сообщениеgling, спасибо. То что нужно!

Автор - VictorM
Дата добавления - 01.08.2017 в 19:34
  • Страница 1 из 1
  • 1
Поиск:

Рейтинг@Mail.ru Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!