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

Вход

Регистрация

Напомнить пароль

 

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

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как разорвать связи макросом? (Макросы/Sub)
Как разорвать связи макросом?
Stork4ever Дата: Суббота, 17.01.2015, 16:50 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

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

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

[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, 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
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2519
Репутация: 674 ±
Замечаний: 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
[vba]
Код
Activesheet.Usedrange.Value=Activesheet.Usedrange.Value
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[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
Еще раз уточним...

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

[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: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
Но связь с книгой не могу порвать, пока не сохраню и не закрою все книги.

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


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

Сообщение отредактировал 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
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2519
Репутация: 674 ±
Замечаний: 0% ±

2010
Использовал такой макрос при создании новой книги из листов. Посмотрите может пригодится.[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]


ЯД-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
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как разорвать связи макросом? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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